-1
하나의 클라이언트와 서버 사이에 소켓 연결을 설정하여 간단한 채팅 응용 프로그램을 만들고 있습니다. 동일한 컴퓨터에있는 두 개의 다른 터미널에서 클라이언트와 서버를 실행할 수 있습니다. 이제 어떻게 두 대의 컴퓨터에서 클라이언트와 서버를 실행할 수 있습니까? 서버 프로그램에서 localhost "127.0.0.1"대신 서버 컴퓨터의 IP 주소를 사용하려고했습니다. 그것은 작동하지 않았다.C의 클라이언트 서버 채팅 응용 프로그램
누군가가이 기능을 구현하는 방법을 알려 줄 수 있습니까? 또한 IP 주소와 포트 번호를 어떻게 동적으로 전달할 수 있습니까?
TCP 클라이언트
#include<sys/socket.h>
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<stdlib.h>
int main()
{
char buf[100];
int k;
int sock_desc;
struct sockaddr_in client;
memset(&client,0,sizeof(client));
sock_desc=socket(AF_INET,SOCK_STREAM,0);
if(sock_desc==-1)
{
printf("Error in socket creation");
exit(1);
}
client.sin_family=AF_INET;
client.sin_addr.s_addr=INADDR_ANY;
client.sin_port=3002;
k=connect(sock_desc,(struct sockaddr*)&client,sizeof(client));
if(k==-1)
{
printf("Error in connecting to server");
exit(1);
}
while(1)
{
printf("\nEnter data to be send to server: ");
fgets(buf,100,stdin);
if(strncmp(buf,"end",3)==0)
break;
k=send(sock_desc,buf,100,0);
if(k==-1)
{
printf("Error in sending");
exit(1);
}
k=recv(sock_desc,buf,100,0);
if(k==-1)
{
printf("Error in receiving");
exit(1);
}
printf("Message got from server is : %s",buf);
}
close(sock_desc);
exit(0);
return 0;
}
TCP 서버
#include<sys/socket.h>
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<stdlib.h>
int main()
{
char buf[100];
int k;
socklen_t len;
int sock_desc,temp_sock_desc;
struct sockaddr_in server,client;
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
sock_desc=socket(AF_INET,SOCK_STREAM,0);
if(sock_desc==-1)
{
printf("Error in socket creation");
exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=inet_addr("127.0.0.1");
server.sin_port=3002;
k=bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
if(k==-1)
{
printf("Error in binding");
exit(1);
}
k=listen(sock_desc,20);
if(k==-1)
{
printf("Error in listening");
exit(1);
}
len=sizeof(client);//VERY IMPORTANT
temp_sock_desc=accept(sock_desc,(struct sockaddr*)&client,&len);
if(temp_sock_desc==-1)
{
printf("Error in temporary socket creation");
exit(1);
}
while(1)
{
k=recv(temp_sock_desc,buf,100,0);
if(k==-1)
{
printf("Error in receiving");
exit(1);
}
printf("Message got from client is : %s",buf);
printf("\nEnter data to be send to client: ");
fgets(buf,100,stdin);
if(strncmp(buf,"end",3)==0)
break;
k=send(temp_sock_desc,buf,100,0);
if(k==-1)
{
printf("Error in sending");
exit(1);
}
}
close(temp_sock_desc);
exit(0);
return 0;
}
'main'에 인수로 IP와 포트를 전달할 수 있습니다. 프로그램은 명령 줄 인수로 IP와 포트를 가져야합니다. – Prabhu
코드를 올바르게 들여 썼다면 훨씬 더 읽기 쉬울 것입니다. – alk
텔넷 또는 다른 네트워크 프로그램이 두 컴퓨터간에 작동하는지 테스트 할 수 있습니다. 일부 방화벽이 두 컴퓨터 간의 통신을 차단할 수 있습니다. – kjohri