<原创>
多进程,可以随意的发送与接收.
服务器端程序:
/*************************************************************************
> File Name: server.c
> Author:
> Mail:
> Created Time: Thu 11 Jun 2015 12:34:37 AM PDT
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netinet/ip.h> /* superset of previous */
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
int main(int argc,const char *argv[])
{
pid_t pid;
char buff[1024];
int serverfd,connfd;
serverfd = socket(PF_INET,SOCK_STREAM,0);
if(serverfd ==-1)
{
perror("socket");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr;
servaddr.sin_family = PF_INET;
servaddr.sin_port = htons(8888);
servaddr.sin_addr.s_addr = inet_addr("192.168.1.102");
if (bind(serverfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
perror("bind");
exit(EXIT_FAILURE);
}
printf("bind success!\n");
if(listen(serverfd,8)==-1)
{
perror("listen");
exit(EXIT_FAILURE);
}
printf("listen...\n");
connfd = accept(serverfd,NULL,NULL);
if(connfd == -1)
{
perror("accept");
exit(EXIT_FAILURE);
}
printf("connected..\n");
if((pid = fork())==-1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid ==0)
{
while(1)
{
recv(connfd,buff,sizeof(buff),0);
printf("kuhuduan:%s",buff);
}
}
else
{
while(1)
{
fgets(buff,sizeof(buff),stdin);
send(connfd,buff,sizeof(buff),0);
}
}
return 0;
}
客户端程序:
/*************************************************************************
> File Name: client.c
> Author:
> Mail:
> Created Time: Thu 11 Jun 2015 12:58:14 AM PDT
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, const char *argv[])
{
int clientfd;
pid_t pid;
char buff[1024];
clientfd = socket(PF_INET,SOCK_STREAM,0);
if(clientfd == -1)
{
perror("socket");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr;
servaddr.sin_family = PF_INET;
servaddr.sin_port = htons(8888);
servaddr.sin_addr.s_addr = inet_addr("192.168.1.102");
if(connect(clientfd,(struct sockaddr *)&servaddr,sizeof(servaddr))==-1)
{
perror("connect");
exit(EXIT_FAILURE);
}
printf("connect success!\n");
if((pid = fork())==-1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid == 0)
{
while(1)
{
fgets(buff,sizeof(buff),stdin);
if (send(clientfd,buff,sizeof(buff),0)==-1)
{
perror("send");
exit(EXIT_FAILURE);
}
}
}
else
{
while(1)
{
if(recv(clientfd,buff,sizeof(buff),0)==-1)
{
perror("recv");
exit(EXIT_FAILURE);
}
printf("fuwuqi:%s",buff);
}
}
}