server.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int sockfd = 0;
int connfd = 0;
if(argc <= 2)
{
printf("Usage:%s IP PORT\n",argv[0]);
return -1;
}
struct sockaddr_in server;
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(argv[2]);
inet_pton(AF_INET,argv[1],&server.sin_addr);
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
perror("socket\n");
return -1;
}
if(bind(sockfd,(struct sockaddr*)&server,sizeof(server)) < 0)
{
perror("bind\n");
close(sockfd);
return -1;
}
if(listen(sockfd,5) < 0)
{
perror("listen\n");
close(sockfd);
return -1;
}
struct sockaddr_in client;
size_t len = sizeof(client);
connfd = accept(sockfd,(struct sockaddr*)&client,&len);
if(connfd < 0)
{
perror("accept\n");
close(sockfd);
return -1;
}
char buf[1024];
fd_set fd_read;
fd_set fd_write;
fd_set fd_except;
FD_ZERO(&fd_read);
FD_ZERO(&fd_write);
FD_ZERO(&fd_except);
while(1)
{
memset(buf,0,sizeof(buf));
FD_SET(connfd,&fd_read);
FD_SET(connfd,&fd_write);
FD_SET(connfd,&fd_except);
if(select(connfd+1,&fd_read,&fd_write,&fd_except,NULL) < 0)
{
perror("select\n");
FD_CLR(connfd,&fd_read);
FD_CLR(connfd,&fd_write);
FD_CLR(connfd,&fd_except);
continue;
}
if(FD_ISSET(connfd,&fd_read))
{
if(recv(connfd,buf,1023,0) < 0)
{
FD_CLR(connfd,&fd_read);
FD_CLR(connfd,&fd_write);
FD_CLR(connfd,&fd_except);
break;
}
printf("buf = %s\n",buf);
}
if(FD_ISSET(connfd,&fd_write))
{
strcpy(buf,"this is test");
if(send(connfd,buf,1023,0) < 0)
{
FD_CLR(connfd,&fd_read);
FD_CLR(connfd,&fd_write);
FD_CLR(connfd,&fd_except);
break;
}
}
if(FD_ISSET(connfd,&fd_write))
{
// strcpy(buf,"this is test");
if(recv(connfd,buf,1023,MSG_OOB) < 0)
{
FD_CLR(connfd,&fd_read);
FD_CLR(connfd,&fd_write);
FD_CLR(connfd,&fd_except);
break;
}
printf("buf = %s\n",buf);
}
FD_CLR(connfd,&fd_read);
FD_CLR(connfd,&fd_write);
FD_CLR(connfd,&fd_except);
}
close(connfd);
close(socket);
return 0;
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc,char* argv[])
{
int sockfd = 0;
if(argc <= 2)
{
printf("Usage:%s IP PORT\n",argv[0]);
return -1;
}
struct sockaddr_in server;
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(argv[2]);
inet_pton(AF_INET,argv[1],&server.sin_addr);
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
perror("socket\n");
return -1;
}
size_t len = sizeof(server);
if(connect(sockfd,(struct sockaddr*)&server,len) < 0)
{
perror("connect\n");
close(sockfd);
return -1;
}
char buf[1024];
memset(buf,0,sizeof(buf));
strcpy(buf,"111222333");
send(sockfd,buf,1024,0);
perror("send");
close(sockfd);
return 0;
}