/***sever***/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/select.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define PORT 1234
#define MAXSOCKFD 10
void main()
{
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!";
pid_t pid;
if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
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,&addr,sizeof(addr))<0)
{
perror("connect");
exit(1);
}
if(listen(sockfd,3)<0)
{
perror("listen");
exit(1);
}
while(1)
{
FD_ZERO(&readfds);
if((newsockfd = accept (sockfd,&addr,&addr_len))<0)
{
perror("accept");
continue;
}
if ((pid = fork()) != 0)
{
close(newsockfd);
continue;
}
FD_SET(newsockfd, &readfds);
printf("cnnect from %s\n",inet_ntoa(addr.sin_addr));
printf("pid = %d, ppid = %d\n", getpid(), getppid());
write(newsockfd,msg,sizeof(msg));
while(1)
{
/*
描述符无变化,数据将阻塞
*/
if (!select(MAXSOCKFD, &readfds, NULL, NULL, 0))
{
continue;
}
if(read(newsockfd,buffer,sizeof(buffer))<=0)
{
printf("connect closed.\n");
close(newsockfd);
break;
}
else
{
printf("From client: %d\n",buffer[0]);
if (write(newsockfd, buffer, strlen(buffer)) < 0)
perror("write");
printf("To client: %d\n\n",buffer[0]);
}
}
}
}
/****client****/
#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>
#include <stdlib.h>
#include <stdio.h>
#define PORT 1234
#define SERVER_IP "127.0.0.1"
main()
{
int s;
struct sockaddr_in addr;
char buffer[256];
static int flag = 1;
if((s = socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
exit(1);
}
/*
填写
sockaddr_in
结构
*/
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(s,&addr,sizeof(addr))<0)
{
perror("connect");
exit(1);
}
/*
接收由
server
端传来的信息
*/
recv(s,buffer,sizeof(buffer),0);
printf("%s\n",buffer);
while(1)
{
bzero(buffer,sizeof(buffer));
/*
从标准输入设备取得字符串
*/
if (flag == 1)
{
read(STDIN_FILENO,buffer,sizeof(buffer));
printf("Insert data:%s\n", buffer);
flag = 0;
}
else
{
read(s,buffer,sizeof(buffer));
printf("From sever: %d\n\n", buffer[0]);
}
/*
将字符串传给
server
端
*/
sleep(2);
buffer[0] += 1;
if(write(s,buffer,sizeof(buffer))<0)
{
perror("send");
exit(1);
}
printf("To sever: %d\n", buffer[0]);
}
}