Linux下socket编程之TCP
2017-06-03 13:34
316 查看
tcp_client.c
tcp_server.c
服务器端运行效果图:
客户端运行结果:
如果有错误欢迎评论
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<unistd.h> void usage(char* proc) { printf("%s [ip][port]"); } int main(int argc,char* argv[]) { if(argc<3) { usage(argv[0]); return 1; } int sock=socket(AF_INET,SOCK_STREAM,0); if(sock<0) { perror("socket"); return 2; } struct sockaddr_in server_addr; server_addr.sin_family=AF_INET; server_addr.sin_port=htons(atoi(argv[2])); server_addr.sin_addr.s_addr=inet_addr(argv[1]); socklen_t len=sizeof(server_addr); int ret=connect(sock,(struct sockaddr*)&server_addr,len); if(ret<0) { perror("connect"); return 3; } printf("coonnect success!\n"); while(1) { printf("client:#"); fflush(stdout); char buff[1024]; ssize_t s = read(0,buff,sizeof(buff)-1); if(s < 0) { perror("read"); exit(-1); } else if(s > 0) { buff[s]='\0'; } write(sock,buff,strlen(buff)); read(sock,buff,sizeof(buff)); printf("server:%s",buff); } return 0; }
tcp_server.c
#include<string.h> #include<stdlib.h> #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<unistd.h> void usage(char* proc) { printf("%s [ip][port]\n",proc); } int startup(char* ip,int port) { int sock=socket(AF_INET,SOCK_STREAM,0);//定义一个文件标识符,这是一个使用IPV4协议下层为TCP if(sock<0) { perror("socket"); return 2; } struct sockaddr_in local;//一个结构体里面存储着具体的socketIP地址和遵守的协议,还有端口号 local.sin_family=AF_INET; local.sin_port=htons(port); local.sin_addr.s_addr=inet_addr(ip); if((bind(sock,(struct sockaddr*)&local,sizeof(local)))<0)//将sock文件表示标识符与结构体绑定 { perror("bing"); return 3; } if(listen(sock,10)<0)//监听这个socket { perror("listen"); close(sock); exit(4); } return sock; } int main(int argc,char* argv[]) { if(argc<3) { usage(argv[0]); return 1; } int listen_sock=startup(argv[1],atoi(argv[2])); struct sockaddr_in client_addr; socklen_t len=sizeof(client_addr); while(1) { int new_sock=accept(listen_sock,(struct sockaddr *)&client_addr,&len);//如果有连接到,就将连接的用户信息记录到结构体client中,并开辟一个新的文件标识符,从该文件标识符所表示的文件中进行读写操作。 if(new_sock<0) { perror("accept"); return 5; } char ipbuff[INET_ADDRSTRLEN]; memset(ipbuff,'\0',sizeof(ipbuff)); inet_ntop(AF_INET,&client_addr.sin_addr,ipbuff,sizeof(ipbuff)); printf("get connect,ip is %s,port is %d\n",ipbuff,ntohs(client_addr.sin_port)); char buff[1024]; while(1) { ssize_t s = read(new_sock,buff,sizeof(buff));//读操作 if(s >0) { buff[s] = '\0'; printf("client:#%s",buff); write(new_sock,buff,strlen(buff));//写操作 } if(s==0) { break; } } printf("client quit!\n"); fflush(stdout); } close(listen_sock); return 0; }
服务器端运行效果图:
客户端运行结果:
如果有错误欢迎评论
相关文章推荐
- Linux下面socket编程的非阻塞TCP研究
- Linux socket编程(TCP,UDP,RAW)
- Linux Socket 编程实例——TCP
- Linux下socket编程,附带tcp例子
- Linux下面socket编程的非阻塞TCP研究
- 简单的IPv6 UDP/TCP socket编程 -- 两台Linux实现简单的ipv6通信
- linux socket编程之TCP与UDP
- linux下TCP socket编程初步(1)
- linux socket编程之TCP与UDP
- Linux下Socket编程之TCP应用
- Linux C socket 编程之TCP
- Linux C socket 编程之TCP
- Linux下TCP Socket编程C语言小实例
- Linux下面socket编程的非阻塞TCP研究
- Linux下面socket编程的非阻塞TCP
- Linux下基本TCP socket编程之客户端
- Linux C socket 编程之TCP
- Linux socket编程(TCP,UDP,RAW)
- Linux下Socket编程之TCP Server端
- Linux下TCP Socket编程C语言小实例