linux socket

来源:互联网 发布:javascript按钮弹窗 编辑:程序博客网 时间:2024/06/05 17:29

下面介绍socket实现通信的例子,客户端socket client和服务端socket server

socket server代码如下:

#include<stdio.h>#include<stdlib.h>#include<netinet/in.h>#include<string.h>#include<sys/types.h>#include<unistd.h>#include<sys/socket.h>#include<linux/in.h>#include<arpa/inet.h>#include<signal.h>#define PORT 8888#define BACKLOG 5void process_conn_server(int s){char buffer[1024];ssize_t size=0;char strs[7]="server:";for(;;){size=recv(s,buffer,1024,0);if(size>0){sprintf(buffer,"%d bytes together",size);write(1,buffer,size);//write to standard outputsend(s,strs,strlen(strs)+1,0);send(s,buffer,strlen(buffer)+1,0);}}}int main(int argc,char *argv[]){printf("hello,wlcome to server!");int ss,sc;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int err;pid_t pid;//bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);//server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");bzero(&(server_addr.sin_zero),8);ss=socket(AF_INET,SOCK_STREAM,0);if(ss<0){printf("socket error !");return -1;}err=bind(ss,(struct sockaddr*)&server_addr,sizeof(server_addr));if(err<0){printf("bind error !");return -1;}err=listen(ss,BACKLOG);if(err<0){                printf("listen error !");return -1;        }printf("start accept:");while(1){printf("wait for connection:");int addr_len=sizeof(struct sockaddr);sc=accept(ss,(struct sockaddr*)&client_addr,&addr_len);if(sc<0){continue;}printf("start a connection successfully !");pid=fork();if(pid==0){//close(ss);printf("child pid:");process_conn_server(sc);}else if(pid>0){//close(sc);printf("parent pid !");//process_conn_server(sc);}else{printf("fork pid failed !");break;}//process_conn_server(sc);}//process_conn_server(sc);return 0;}


socket client代码如下:


#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>#include<arpa/inet.h>//#include<linux/in.h>#include<netinet/in.h>#include<signal.h>#define PORT 8888static int s;void sig_process_client(int signo){printf("\nCatch a exit signal !\n");close(s);exit(0);}void process_conn_client(int ss){ssize_t size=0;ssize_t count=0;char buffer[1024];char temp[1024];char src[5]="From:";for(;;){/*read data from  standard input and stored in buffer*/size=read(0,buffer,1024);//count=recv(ss,temp,1024,0);/*if(count>0){send(ss,src,strlen(src)+1,0);}*/if(size>0){//sprintf(buffer,"%d bytes together !",size);//write(ss,buffer,size);send(ss,buffer,size,0);count=recv(ss,temp,1024,0);write(1,temp,count);/*write to standard output*/printf("\n");}}}int main(int argc,char *argv[]){struct sockaddr_in server_addr;//if(argc==1){//printf("Please input server address:\n");//return 0;//}signal(SIGINT,sig_process_client);s=socket(AF_INET,SOCK_STREAM,0);if(s<0){printf("socket error !");}server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);//server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//inet_pton(AF_INET,argv[1],&server_addr.sin_addr);bzero(&(server_addr.sin_zero),8);connect(s,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));process_conn_client(s);return 0;}


1 0
原创粉丝点击