5.1 Netzwerk-Programmierung in C/C++
Ein Simpler TCP-Server:
#include "cliserv.h" int main() { struct sockaddr_in serv, cli; char request[REQUEST], reply[REPLY]; int listenfd, sockfd, n, clilen; if ((listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) err_sys("socket error"); memset($serv, sizeof(serv), 0); serv.sin_family = AF_INET; serv.sin_addr.s_addr = htonl(INADDR_ANY); serv.sin_port = htons(TCP_SERV_PORT); if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0) err_sys("bind error"); if (listen(listenfd, SOMAXCONN) < 0) err_sys("listen error"); for (;;) { clilen = sizeof(cli); if ((sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0) err_sys("accept error"); if ((n = read_stream(sockfd, request, REQUEST)) < 0) err_sys("read error"); // n Bytes in request[] verarbeiten, reply[] erzeugen if (write(sockfd, reply, REPLY) != REPLY) err_sys("write error"); close(sockfd); } } |
import java.net.*; import java.io.*; public static void main(String[] args) { ServerSocket serv; Socket cli; PrintStream out; InputStream in; try { serv = new ServerSocket(33333); } catch(IOException e) { ... } while(true) { try { cli = serv.accept(); } catch(IOException e) { ... } try { out = cli.getOutputStream(); in = cli.getInputStream(); String request = in.readln(); // reply erzeugen... out.println(reply); cli.close(); } catch (IOException e) { ... } } try { serv.close(); } catch (IOException e) { ... } } |
Ein simpler TCP-Client:
#include "cliserv.h" int main(int argc, char *argv[]) { struct sockaddr_in serv; char request[REQUEST], reply[REPLY]; int sockfd, n; // Prüfen der Parameter... memset(&serv, sizeof(serv), 0); serv.sin_family = AF_INET; serv.sin_addr.s_addr = inet_addr(argv[1]); serv.sin_port = htons(TCP_SERV_PORT); if (connect(sockfd, (SA) &serv, sizeof(serv)) < 0 err_sys("connect error"); // request[] initialisieren... if (write(sockfd, request, REQUEST) != REQUEST) err_sys("write error"); if (shutdown(sockfd, 1) < 0) err_sys("shutdown error"); if ((n = read_stream(sockfd, reply, REPLY)) < 0) err_sys("read error"); // n Bytes von reply[] verarbeiten... exit(0); } |
import java.net.*; import java.io.*; public static void main(String[] args) { Socket clnt; PrintStream out; InputStream in; try { serv = new Socket("localhost", 33333); } catch(IOException e) { ... } try { out = serv.getOutputStream(); in = serv.getInputStream(); out.print("Hallo Server!"); String reply = in.readln(); serv.close(); } catch (IOException e) { ... } } |