我有1个服务器1客户端之间的连接和聊天代码,如下所示:
/*Server Side*/
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<unistd.h>
main()
{
int sd,i,len,bi,nsd,port;
char content[30];
struct sockaddr_in ser,cli;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("\nSocket problem");
return 0;
}
printf("\nSocket created\n");
bzero((char*)&cli,sizeof(ser));
printf("ENTER PORT NO:\n");
scanf("%d",&port);
printf("\nPort Address is %d\n:",port);
ser.sin_family=AF_INET;
ser.sin_port=htons(port);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
bi=bind(sd,(struct sockaddr *)&ser,sizeof(ser));
if(bi==-1)
{
printf("\nBind error, Port busy, Plz change port in client and server");
return 0;
}
i=sizeof(cli);
listen(sd,5);
nsd = accept(sd,((struct sockaddr *)&cli),&i);
if(nsd==-1)
{
printf("\nCheck the description parameter\n");
return 0;
}
printf("\nConnection accepted!");
if(fork())
{
printf("\nEnter the data to be send type exit for stop:\n");
scanf("%s",content);
while(strcmp(content,"exit")!=0)
{
send(nsd,content,30,0);
scanf("%s",content);
}
send(nsd,"exit",5,0);
}
else
i = recv(nsd,content,30,0);
while(strcmp(content,"exit")!=0)
{
printf("\nClient: %s\n",content);
i=recv(nsd,content,30,0);
}
printf("\nBye");
send(nsd,"Offline",10,0);
close(sd);
close(nsd);
return 0;
}
/*Client Side*/
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
int sd,con,port,i,Res;
char content[30];
struct sockaddr_in cli;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("\nSocket problem");
return 0;
}
bzero((char*)&cli,sizeof(cli));
cli.sin_family = AF_INET;
printf("ENTER PORT NO:\n");
scanf("%d",&port);
cli.sin_port=htons(port);
cli.sin_addr.s_addr=htonl(INADDR_ANY);
con=connect(sd,(struct sockaddr*)&cli,sizeof(cli));
if(con==-1)
{
printf("\nConnection error");
return 0;
}
if(fork())
{
printf("\nEnter the data to be send type exit for stop:\n");
scanf("%s",content);
while(strcmp(content,"exit")!=0)
{
send(sd,content,30,0);
scanf("%s",content);
}
send(sd,"exit",5,0);
}
else
{
i=recv(sd,content,30,0);
while(strcmp(content,"exit")!=0)
{
printf("\nServer: %s\n",content);
i=recv(sd,content,30,0);
}
send(sd,"exit",5,0);
}
close(sd);
return 0;
}
我需要连接另一个也可以使用同一端口聊天的客户端。 请给我代码来做到这一点。 谢谢。
答案 0 :(得分:1)
调用fork()
后,您必须分叉服务器的程序逻辑。一个分支与客户端通信,另一个分支必须再次呼叫接受。
无需生成新进程,您还可以使用select()
函数处理所有连接以及侦听进程。该函数的结果和FD_ISSET宏的结果将指示需要处理或建立哪个连接。
答案 1 :(得分:0)
我们可以在服务器程序中使用线程连接多个客户端。为此,我们需要在服务器中使用pthread头文件。