- 论坛徽章:
- 0
|
/*client.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXDATASIZE 100
#define SERVPORT 3333
int main(int argv,char **argc){
pid_t pid;
int sockfd,sendbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argv h_addr);
bzero(&(serv_addr.sin_zero),8);
//调用connect函数主动发起对服务器的链接
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){
perror("connect");
exit(1);
}
printf("connect %s is success!\n",inet_ntoa(serv_addr.sin_addr));
pid=fork();
if(pid==-1){
perror("fork");
exit(1);
}
else if(pid==0){
//发消息给服务端
if((sendbytes=send(sockfd,"hello world\n",MAXDATASIZE,1))==-1){
perror("client send");
exit(1);
}
}else{
sleep(5);
if(recv(sockfd,buf,MAXDATASIZE,0)==-1){
perror("client recv");
exit(1);
}
fprintf(stderr,"recv : %s from %s \n",\
buf,inet_ntoa(serv_addr.sin_addr));
}
close(sockfd);
return 0;
}
/*server.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNETCTED_NO 10
#define MAXDATASIZE 100
int main( ){
int sockfd;
int client_fd;
int sin_size,recvbytes;
pid_t pid;
char sbuf[MAXDATASIZE]="I am server!";
struct sockaddr_in server_sockaddr;
struct sockaddr_in client_sockaddr;
char buf[MAXDATASIZE];
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
printf("socket success!sockfd= %d \n",sockfd);
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8); //等价于memset(&(server_sockaddr.sin_zero),0,8),将server_sockaddr.sin_zero所在的内存设置为0
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
printf("bind is success\n");
if(listen(sockfd,BACKLOG)==-1){
perror("listen");
exit(1);
}
printf("linstening ......\n");
sin_size=sizeof(struct sockaddr_in);
while(1){
if((client_fd=accept(sockfd, \
(struct sockaddr *)&client_sockaddr,&sin_size))==-1){
perror("accept");
exit(1);
}
fprintf(stderr,"accept from:%s\n",inet_ntoa(client_sockaddr.sin_addr));
pid=fork();
if(pid<0){
perror("fork");
exit(1);
}else if(!pid){
if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){
perror("server recv");
exit(1);
}
printf("receveived : %s\n",buf);
}else{
if(send(client_fd,sbuf,MAXDATASIZE,0)==-1){
perror("server send");
exit(1);
}
}
}
close(sockfd);
return 0 ;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86122/showart_1988008.html |
|