J'ai commencé à faire de la programmation réseau dans la conférence, donc je vais le résumer au lieu de notes. Pour le moment, j'écris simplement comment j'ai écrit le programme, et je n'ai pas l'intention d'entrer dans les concepts de base pour le moment. Je prévois de modifier les articles au besoin sans les diviser. Le langage de programmation est python 2.7 (car il est utilisé dans la recherche), langage c (désignation de cours). Cependant, comme il s'agit d'une partie plutôt que du tout, si vous voulez y faire référence, veuillez dessiner la bibliothèque et la déclaration de variable à lire par vous-même.
J'écrirai selon la conférence et le devoir. Actuellement, j'écris les contenus suivants. De plus, je vérifierai auprès de l'enseignant les informations du serveur de destination de la connexion.
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
La famille d'adresses AF_INET6 est représentée par un taple de longueur 4 (hôte, port, flowinfo, scopeid), où flowinfo et scopeid spécifient les valeurs de sin6_flowinfo et sin6_scope_id dans C struct sockaddr_in6, respectivement. Pour la compatibilité descendante, sin6_flowinfo et sin6_scope_id peuvent être omis dans les méthodes du module socket, mais l'omission de scopeid peut entraîner des problèmes de gestion des adresses IPv6 étendues.
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``` et
--port, et les spécifications de l'hôte sont `` -b
et --binding``` (-h est Il était rempli d'aide, et la commande lors du démarrage du serveur IP dans les rails était
rails s -b 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)
` et utilisez socket pour une adresse IP non valide. IPv4 ou IPv6 a été déterminé en utilisant l'occurrence de .error.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 et la spécification de l'hôte est `` -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;
}
}