소켓을 사용하여 TCP 서버/클라이언트를 구현하려고합니다. 나는 출구에서 입력 할 때까지 클라이언트에서 보내는 모든 내용이 줄 단위로 서버에 표시되는 방식으로 프로그램을 작성했습니다. 프로그램은 작동하지만 마지막에 서버에 데이터가 모두 표시됩니다. 아무도 코드를 확인해 주시겠습니까? 이 NUL 종료되지 않도록데이터가 제대로 송/수신되지 않습니다.
TCP의 SERVER
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
char buf[100];
socklen_t len;
int k,sock_desc,temp_sock_desc;
struct sockaddr_in client,server;
memset(&client,0,sizeof(client));
memset(&server,0,sizeof(server));
sock_desc = socket(AF_INET,SOCK_STREAM,0);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = 7777;
k = bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
k = listen(sock_desc,20);
len = sizeof(client);
temp_sock_desc = accept(sock_desc,(struct sockaddr*)&client,&len);
while(1)
{
k = recv(temp_sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;
if(k>0)
printf("%s",buf);
}
close(sock_desc);
close(temp_sock_desc);
return 0;
}
TCP의 CLIENT
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
char buf[100];
struct sockaddr_in client;
int sock_desc,k;
sock_desc = socket(AF_INET,SOCK_STREAM,0);
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr("127.0.0.1");
client.sin_port = 7777;
k = connect(sock_desc,(struct sockaddr*)&client,sizeof(client));
while(1)
{
gets(buf);
k = send(sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;
}
close(sock_desc);
return 0;
}
좀 더 들여 쓰기 좋은 것입니다. – ThiefMaster
'gets()'를 사용해서는 안됩니다. 대신'fgets()'를 사용하십시오. – JeremyP