服务端代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <error.h>
#define PORT 8888
#define maxsize 1024
struct sockaddr_in server,client;
int listen_socket,connect_socket[1024];
int len;
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 server\n");
printf("服务器初始化完成!\n");
}
int main()
{
int i,maxfd,ret;
char recbuf[1024],sendbuf[1024];
fd_set readfd;
memset(connect_socket,-1,sizeof(connect_socket)/sizeof(int));
socket_init();
maxfd=listen_socket;
while(1)
{
FD_ZERO(&readfd);
FD_SET(listen_socket,&readfd);
for(i=0;i<sizeof(connect_socket)/sizeof(int);i++)
{
if(connect_socket[i]==-1) continue;
else FD_SET(connect_socket[i],&readfd);
}
select(maxfd+1,&readfd,NULL,NULL,NULL);
if(FD_ISSET(listen_socket,&readfd))
{
len=sizeof(client);
for(i=0;i<sizeof(connect_socket)/sizeof(int);i++)
{
if(connect_socket[i]==-1)
{
connect_socket[i]=accept(listen_socket,(struct sockaddr *)&client,&len);
if(connect_socket[i] > maxfd) maxfd=connect_socket[i];
printf("客户机%d已连接\n",connect_socket[i]);
break;
}
}
}
for(i=0;i<sizeof(connect_socket)/sizeof(int);i++)
{
if(FD_ISSET(connect_socket[i],&readfd))
{
ret=read(connect_socket[i],recbuf,sizeof(recbuf));
if(ret==0)
{
printf("客户机%d已断开连接\n",connect_socket[i]);
close(connect_socket[i]);
connect_socket[i]=-1;
continue;
}
printf("客户机%d:%s\n",connect_socket[i],recbuf);
strcpy(sendbuf,recbuf);
write(connect_socket[i],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;
}