Ich habe in der Vorlesung angefangen, Netzwerkprogrammierung zu betreiben, daher werde ich sie anstelle von Notizen zusammenfassen. Im Moment schreibe ich nur auf, wie ich das Programm geschrieben habe, und ich habe im Moment nicht die Absicht, auf die Grundkonzepte einzugehen. Ich habe vor, die Beiträge nach Bedarf zu bearbeiten, ohne sie zu teilen. Die Programmiersprache ist Python 2.7 (weil es in der Forschung verwendet wird), c-Sprache (Vorlesungsbezeichnung). Da es sich jedoch eher um einen Teil als um das Ganze handelt, zeichnen Sie die Bibliothek und die Variablendeklaration, die Sie selbst lesen möchten, wenn Sie darauf verweisen möchten.
Ich werde entsprechend der Vorlesung und Aufgabe schreiben. Derzeit schreibe ich die folgenden Inhalte. Außerdem werde ich mich beim Lehrer nach den Informationen des Verbindungszielservers erkundigen.
ipv4_simple_client.py
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with closing(sock):
sock.connect((host, port))
sock.send(b'Hello world')
print(sock.recv(bufsize))
return
Die AF_INET6-Adressfamilie wird durch ein Taple der Länge 4 (Host, Port, Flowinfo, ScopeID) dargestellt, wobei Flowinfo und Scopeid die Werte von sin6_flowinfo und sin6_scope_id in der C-Struktur sockaddr_in6 angeben. Aus Gründen der Abwärtskompatibilität können sin6_flowinfo und sin6_scope_id in den Socket-Modulmethoden weggelassen werden. Das Weglassen von scopeid kann jedoch zu Problemen beim Umgang mit IPv6-Adressen mit Gültigkeitsbereich führen.
ipv6_simple_client.py
sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
with closing(sock):
sock.connect((host, port, flowninfo, scopeid))
sock.send(b'Hello world')
print(sock.recv(bufsize))
return
-p``` und
--port```, und die Hostspezifikationen sind
-b``` und
--binding``` (-h ist Der mit Hilfe gefüllte Befehl beim Starten des IP-Servers in Rails lautete
Rails s -b <IP-Adresse>
`...)argparse_sample.py
p = argparse.ArgumentParser()
p.add_argument('-b', '--binding', default='127.0.0.1')
p.add_argument('-p', '--port', default=3000, type=int)
args = p.parse_args()
print(args.binding)
print(args.port)
socket.inet_pton (address_family, ip_string)
` und verwenden Sie socket für eine ungültige IP-Adresse. IPv4 oder IPv6 wurde unter Verwendung des Auftretens von .error bestimmt.confirm_address_family.py
address_family = socket.AF_INET
try:
socket.inet_pton(address_family, host)
except:
address_family = socket.AF_INET6
try:
socket.inet_pton(address_family, host)
except:
raise Exception , "invalid host. please confirm the value of -b or --binding"
finally:
print('address_family is %s' %address_family)
ipv4_simple_client.c
int family = AF_INET;
int sock = socket(family, SOCK_STREAM, 0);
struct sockaddr_in server;
server.sin_family = family;
server.sin_port = htons(port);
int pton = inet_pton(family, host, &server.sin_addr);
if (s != 1){
perror("invalid host.");
exit(1);
}
int con = connect(sock, (struct sockaddr *)&server, sizeof(server));
if (con < 0){
perror("connection failure.");
exit(1);
}
char buf[244];
memset(buf, 0, sizeof(buf));
read(sock, buf, sizeof(buf));
printf("%s\n", buf);
ipv6_simple_client.c
int family = AF_INET6;
int sock = socket(family, SOCK_STREAM, 0);
struct sockaddr_in6 server;
server.sin6_family = family;
server.sin6_port = htons(port);
int pton = inet_pton(family, host, &server.sin6_addr);
if (s != 1){
perror("invalid host.");
exit(1);
}
int con = connect(sock, (struct sockaddr *)&server, sizeof(server));
if (con < 0){
perror("connection failure.");
exit(1);
}
char buf[244];
memset(buf, 0, sizeof(buf));
read(sock, buf, sizeof(buf));
printf("%s\n", buf);
`-p``` und die Hostspezifikation ist`
-b```.getopt_sample.c
int result;
char *host;
int port;
while((result=getopt(argc,argv,"b:p:"))!=-1){
switch(result){
case 'b':
host = optarg;
break;
case 'p':
port = atoi(optarg);
break;
}
}
Recommended Posts