[PYTHON] [Pratique] Programmation TCP

introduction

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.

La façon de procéder

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.

client

Connectez-vous une fois pour le moment! !!

conditions

Implémentation (python: github)

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

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)

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)

Implémentation (langage c: github)

  1. Créez une socket avec int socket (int domain, int type, int protocol);.
  2. Spécifiez la famille d'adresses et le port dans la structure sockaddr_in.
  3. Utilisez int inet_pton (int af, const char * src, void * dst); pour changer la chaîne src , Convertir en structure d'adresse réseau de la famille d'adresses af et copier dans dst.
  4. int connect(int sockfd, const struct sockaddr *addr, connectez-vous au serveur avec socklen_t addrlen);.

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);

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

[Pratique] Programmation TCP
pratique numpy 1
Programmation Feces Gorua
Programmation graphique