C/C++の宿題を片付けます 113代目

このエントリーをはてなブックマークに追加
970デフォルトの名無しさん
>>911
コンパイルだけ通した。動作未確認。
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int servSock, clientSock, recvLen, totalLen, n1, n2;
struct sockaddr_in servAddr,clientAddr;
unsigned int clientLen;
char buf[8];
if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) exit( 1 );
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(12345);
if (bind(servSock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) exit( 2 );
if (listen(servSock, 1) < 0) exit( 3 );
while ( 1 ) {
clientLen = sizeof(clientAddr);
if ((clientSock = accept(servSock, (struct sockaddr *) &clientAddr, &clientLen)) < 0) exit ( 4 );
recvLen = totalLen = 0;
while ( recvLen < 8 ) {
if ((recvLen = recv(clientSock, buf + totalLen, 8, 0)) < 0) exit( 5 );
totalLen += recvLen;
}
n1 = ntohl(*(int*)buf);
n2 = ntohl(*(int*)(buf+4));
printf("%d+%d=%d\n", n1, n2, n1 + n2);
}
}