[PYTHON] [Übung] TCP-Programmierung

Einführung

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.

Wie geht es weiter?

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.

Klient

Vorerst einmal verbinden! !!

Bedingungen

Implementierung (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

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

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)

Implementierung (c-Sprache: github)

  1. Erstellen Sie einen Socket mit int socket (int domain, int type, int protocol);.
  2. Geben Sie die Adressfamilie und den Port in der Struktur sockaddr_in an.
  3. Verwenden Sie int inet_pton (int af, const char * src, void * dst);, um die Zeichenfolge src zu ändern , In Netzwerkadressstruktur der Adressfamilie af konvertieren und nach dst kopieren.
  4. int connect(int sockfd, const struct sockaddr *addr, Verbindung zum Server mit 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

[Übung] TCP-Programmierung
Numpy-Übung 1
Kot Gorua Programmierung
Grafikprogrammierung