客户端:
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define PORT 1234
#define SERVER_IP "127.0.0.1"
int main(void)
{
int clientnum;
struct sockaddr_in addr;
char buff[256];
// create the socket
if((clientnum=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket creat error!\n");
exit(1);
}
//set the socket
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr = inet_addr(SERVER_IP);
if(connect(clientnum,(struct sockaddr*)&addr,sizeof(addr))<0)
{
printf("socket connect error!\n");
exit(1);
}
else
{
printf("socket connet ................. [ok]\n");
}
recv(clientnum,buff,sizeof(buff),0);
printf("%s\n",buff);
while(1)
{
bzero(buff,sizeof(buff));
//read(STDIN_FILENO,buff,sizeof(buff));
gets(buff);
if(send(clientnum,buff,sizeof(buff),0)<0)
{
printf("send error\n");
break;
}
if(recv(clientnum,buff,sizeof(buff),0)<0)
{
printf("recv error\n");
break;
}
}
return 1;
}
服务器端:
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define PORT 1234
#define MAXSOCKFD 10
int main(void)
{
int sockfd,newsockfd,is_connected[MAXSOCKFD],fd;
struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
fd_set readfds;
char buffer[256];
char msg[ ] ="Welcome to server!\n";
if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket create error\n");
exit(1);
}
bzero(&addr,sizeof(addr));
addr.sin_family =AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)))
{
printf("connect error \n");
exit(1);
}
if(listen(sockfd,3)<0)
{
printf("listen error \n");
exit(1);
}
for(fd=0;fd<MAXSOCKFD;fd++)
is_connected[fd]=0;
while(1)
{
FD_ZERO(&readfds);
FD_SET(sockfd,&readfds);
for(fd=0;fd<MAXSOCKFD;fd++)
if(is_connected[fd]) FD_SET(fd,&readfds);
if(!select(MAXSOCKFD,&readfds,NULL,NULL,NULL))
continue;
for(fd=0;fd<MAXSOCKFD;fd++)
if(FD_ISSET(fd,&readfds))
{
if(sockfd ==fd)
{
if((newsockfd = accept (sockfd,&addr,&addr_len))<0)
printf("accept error !\n");
//write(newsockfd,msg,sizeof(msg));
send(newsockfd,"欢迎登陆服务器",strlen("欢迎登陆服务器")+1,0);
is_connected[newsockfd] =1;
printf("cnnect from %s\n",inet_ntoa(addr.sin_addr));
}
else
{
bzero(buffer,sizeof(buffer));
if(read(fd,buffer,sizeof(buffer))<=0)
{
printf("%s\n",buffer);
printf("connect closed.\n");
is_connected[fd]=0;
close(fd);
}
else
printf("%s\n",buffer);
}
}
}
return 1;
}