Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何在tcp套接字api程序中一个接一个地连接客户端 server.c #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main() { 结构pollfd fdarray[5]; 内部sfd、端口、nsfd、n、clen、ret、i; char-str[100]; cadd sadd中的结构sockaddr_; memset(str,0,sizeof(str)); sfd=套接字(AF_INET,SOCK_STREAM,0); if(sfd_Sockets_Tcp_Client Server - Fatal编程技术网

Sockets 如何在tcp套接字api程序中一个接一个地连接客户端 server.c #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main() { 结构pollfd fdarray[5]; 内部sfd、端口、nsfd、n、clen、ret、i; char-str[100]; cadd sadd中的结构sockaddr_; memset(str,0,sizeof(str)); sfd=套接字(AF_INET,SOCK_STREAM,0); if(sfd

Sockets 如何在tcp套接字api程序中一个接一个地连接客户端 server.c #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main() { 结构pollfd fdarray[5]; 内部sfd、端口、nsfd、n、clen、ret、i; char-str[100]; cadd sadd中的结构sockaddr_; memset(str,0,sizeof(str)); sfd=套接字(AF_INET,SOCK_STREAM,0); if(sfd,sockets,tcp,client-server,Sockets,Tcp,Client Server,如果我正确理解了这个问题:您希望为已经连接的客户端提供服务,而有些客户端尚未连接 您可以通过将client accept()ing移动到while(1)循环中来实现这一点。 为此,必须将服务器套接字添加到fdarray,并在接受新客户端时将客户端套接字添加到fdarray 这里有一个非常类似的例子:如果我理解正确的话:您希望为已经连接的客户端提供服务,而有些客户端尚未连接 您可以通过将client accept()ing移动到while(1)循环中来实现这一点。 为此,必须将服务器套接字添加到f

如果我正确理解了这个问题:您希望为已经连接的客户端提供服务,而有些客户端尚未连接

您可以通过将client accept()ing移动到
while(1)
循环中来实现这一点。 为此,必须将服务器套接字添加到
fdarray
,并在接受新客户端时将客户端套接字添加到
fdarray


这里有一个非常类似的例子:

如果我理解正确的话:您希望为已经连接的客户端提供服务,而有些客户端尚未连接

您可以通过将client accept()ing移动到
while(1)
循环中来实现这一点。 为此,必须将服务器套接字添加到
fdarray
,并在接受新客户端时将客户端套接字添加到
fdarray

下面是一个非常类似的例子:

server.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<poll.h>
#include<unistd.h>
#include<arpa/inet.h>

int main()
{
struct pollfd fdarray[5];
int sfd,port,nsfd,n,clen,ret,i;
char str[100];
struct sockaddr_in sadd,cadd;
memset(str,0,sizeof(str));
sfd=socket(AF_INET,SOCK_STREAM,0);
if(sfd<0)
{
printf("sorry unable to open the file");
exit(1);
}
memset(&sadd,0,sizeof(sadd));
sadd.sin_port=htons(9796);
sadd.sin_family=AF_INET;
sadd.sin_addr.s_addr=INADDR_ANY;
if(bind(sfd,(struct sockaddr*) &sadd,sizeof(sadd))<0)
{
printf("earror");
exit(0);
}
listen(sfd,5);
 clen=sizeof(cadd);
for(i=0;i<5;i++)
{
nsfd=accept(sfd,(struct sockaddr*)&cadd,&clen);
 if(nsfd<0)
{
 printf("error accepting client");
 exit(1);
 }
 fdarray[i].fd=nsfd;
 fdarray[i].events=POLLIN;
 fdarray[i].revents=0;
 }
 while(1)
 {
 ret=poll(fdarray,5,-1);
 for(i=0;i<5;i++)
 {
  if(fdarray[i].revents==POLLIN)
   {
   n=read(fdarray[i].fd,str,100);
  if(n<0)
  printf("arreo");
  printf("message is:%s \n",str);
  char *buff="message received";
  int j;
  for( j=0;j<5;j++)
   {
   if(j!=i)
   n=write(fdarray[j].fd,buff,sizeof(buff));
   }
   }
   }
   }
   return 0;
    }
    client.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<poll.h>
#include<unistd.h>
int main(int argc,char* argv[])
{
int sfd,i;
char msg[1024];
char blanmsg[1024];
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
sfd=socket(AF_INET,SOCK_STREAM,0);
saddr.sin_family=AF_INET;
inet_pton(AF_INET,"127,0.0.1",&saddr.sin_addr);
saddr.sin_port=htons(9796);
connect(sfd,(struct sockaddr*)&saddr,sizeof(saddr));
for(i=0;i<5;i++)
{
fgets(msg,1024,stdin);
send(sfd,msg,strlen(msg),0);
recv(sfd,blanmsg,sizeof(blanmsg),0);
printf("%s",blanmsg);
fflush(stdout);
}
exit(0);
}