服务器代码
#include <stdio.h>
#include <poll.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <error.h>
#include <errno.h>
#define maxsize 1024
#define PORT 8888
struct sockaddr_in server,client;
int listen_socket;
int len;
struct pollfd poll_fd[maxsize];
void socket_init()
{
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = htonl(0);
listen_socket=socket(AF_INET,SOCK_STREAM,0);
if(listen_socket < 0)
{
perror("socket:");
exit(1);
}
if(bind(listen_socket,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("bind:");
exit(1);
}
if(listen(listen_socket,128) < 0)
{
perror("listen:");
exit(1);
}
printf("this is sever\n");
printf("服务器初始化完成!\n");
}
int main()
{
int i,max,ret;
char recbuf[1024],sendbuf[1024];
len=sizeof(client);
socket_init();
poll_fd[0].fd=listen_socket;
poll_fd[0].events=POLLRDNORM;
for(i=1;i<maxsize;i++) poll_fd[i].fd=-1;
max=1;
while(1)
{
poll(poll_fd,max,-1);
if(poll_fd[0].revents & POLLRDNORM)
{
for(i=1;i<maxsize;i++)
{
if(poll_fd[i].fd ==-1)
{
poll_fd[i].fd=accept(listen_socket,(struct sockaddr *)&client,&len);
poll_fd[i].events = POLLRDNORM;
printf("客户机%d已连接\n",poll_fd[i].fd);
max++;
break;
}
}
}
for(i=1;i<maxsize;i++)
{
if(poll_fd[i].revents & POLLRDNORM)
{
ret=read(poll_fd[i].fd,recbuf,sizeof(recbuf));
if(ret==0)
{
printf("客户机%d已断开连接\n",poll_fd[i].fd);
close(poll_fd[i].fd);
poll_fd[i].fd=-1;
continue;
}
printf("客户机%d:%s\n",poll_fd[i].fd,recbuf);
strcpy(sendbuf,recbuf);
write(poll_fd[i].fd,sendbuf,sizeof(sendbuf));
}
}
}
close(listen_socket);
return 0;
}
客户端代码
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
int socket_fd;
struct sockaddr_in server;
void socket_init()
{
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
socket_fd = socket(AF_INET,SOCK_STREAM,0);
if(socket_fd < 0)
{
perror("socket:");
exit(1);
}
if(connect(socket_fd,(struct sockaddr *)&server,sizeof(server))<0)
{
perror("connect:");
exit(1);
}
}
int main()
{
char sendbuf[1024],recbuf[1024];
printf("this is client\n");
socket_init();
while(1)
{
scanf("%s",sendbuf);
if(write(socket_fd,sendbuf,sizeof(sendbuf))<0)
{
perror("write:");
exit(1);
}
if(read(socket_fd,recbuf,sizeof(recbuf))<0)
{
perror("read:");
exit(1);
}
printf("%s\n",recbuf);
}
close(socket_fd);
return 0;
}