Я делаю это простое приложение чата между одним клиентом и сервером, установив соединение сокета между ними. Я могу запустить клиент и сервер на двух разных терминалах на одном компьютере. Теперь, как я могу запустить клиент и сервер на двух разных компьютерах? Я попытался сделать это, передав IP-адрес серверного компьютера вместо локального «127.0.0.1» в серверной программе. Это не сработало.Приложение чата для клиентского сервера в c
Может кто-нибудь дать мне знать, как реализовать это. Кроме того, как я могу динамически передавать IP-адрес и номер порта?
TCP Client
#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;
}
Вы можете передать IP и порт в качестве аргументов в 'main'. Программа должна принимать IP и порт в качестве аргументов командной строки. – Prabhu
Пожалуйста, правильно отложите свой код, тогда было бы гораздо более читаемым. – alk
Вы можете проверить, работает ли telnet или любая другая сетевая программа между двумя компьютерами. Существует вероятность того, что некоторые межсетевые экраны могут блокировать связь между этими двумя компьютерами. – kjohri