#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 buff[100];
struct sockaddr_in sadd,cadd;
memset(buff,0,sizeof(buff));
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(3503);
sadd.sin_family=AF_INET;
sadd.sin_addr.s_addr=INADDR_ANY;
if(bind(sfd,(struct sockaddr*) &sadd,sizeof(sadd))<0)
{
printf("errortttt");
//close(sfd);
exit(0);
}
int r;
r=listen(sfd,5);
if(r<0)
{
perror("error");
}
memset(fdarray,0,sizeof(fdarray));
fdarray[0].fd=sfd;
fdarray[0].events=POLLIN;
clen=sizeof(cadd);
int rc,nfds=1;
printf("waiting on poll\n");
while(1){
rc=poll(fdarray,nfds,-1);
if(rc<0)
{
perror("poll failed");
}
int currentsize=nfds;
for(i=0;i<currentsize;i++)
{
if(fdarray[i].revents==0)
continue;
else if(fdarray[i].fd==sfd)
{
printf("socket is reading");
nsfd=accept(sfd,NULL,NULL);
printf("new connection is established");
fdarray[nfds].fd=nsfd;
fdarray[nfds].events=POLLIN;
nfds++;
}
else
{
printf("%d",fdarray[i].fd);
recv(fdarray[i].fd,buff,sizeof(buff),0);
int j=0;
for(j=1;j<nfds;j++)
{
if(j!=i)
send(fdarray[j].fd,buff,sizeof(buff),0);
}
}
}
}
return 0;
}
я к новой сети это чат-сервер, который означает, что чем предположим, что есть 10 клиентов все подключенные к серверу, когда один из клиентского посыла сообщение, которое сервер должен отправить сообщение всем клиентам, кроме клиента, который отправляет, я сделал это, используя программу опроса, написанную в tcp, каковы изменения, которые необходимо внести для преобразования в udp и как опросить в udp, поскольку есть нет nsfds то значит принять звоноккакие изменения должны быть сделаны для того, чтобы преобразовать TCP progrem в УДП
#include "libsock"
int sfd=0;
* sender(void* dummy)
{
char buf[512];
int len=1;
int i;
while(len>0){
for(i=0;i<512;i++)
buf[i]='\0';
fgets(buf,512,stdin);
len=send(sfd,buf,strlen(buf)+1,0);
}
}
void* receiver(void* dummy)
{
int len=1;
char buf[512];
int i;
while(len>0)
{
for(i=0;i<512;i++)
buf[i]='\0';
len=recv(sfd,buf,512,0);
printf("%s",buf);
}
}
int main()
{
sfd=socket(AF_INET,SOCK_STREAM,0);
if(sfd<0)
{
printf("socket error.\n");
return 0;
}
struct sockaddr_in serv;
serv.sin_family=AF_INET;
serv.sin_port=htons(3503);
inet_pton(AF_INET,"127.0.0.1",&serv.sin_addr);
if(connect(sfd,(struct sockaddr*)&serv,sizeof(serv))<0)
return 0;
pthread_t s,r;
pthread_create(&s,NULL,sender,NULL);
pthread_create(&r,NULL,receiver,NULL);
pthread_join(s,NULL);
return 0;
}
Показать, что вы пробовали. Вы не можете сбросить два неперечисленных списков кода и сказать «исправить это», как это выглядит. – CodeCaster
О том же количестве изменений, чтобы конвертировать бухгалтерское приложение в игру. – 2013-02-27 19:36:03
Отступ требуется! –