Socket编程:之TCP案例
2016-08-03 15:56
330 查看
转载请加上博文引用:http://i.cnblogs.com/EditPosts.aspx?postid=5733248&update=1
服务端:
编译:
gcc -o server server.c
运行:
./server 6666
客户端:
编译:
gcc -o client client.c
运行:
./client 192.168.0.30 6666
服务端:
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <time.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int sockfd; void do_service(int fd) { long t = time(0); char *s = ctime(&t); write(fd,s,strlen(s)); } void out_client(struct sockaddr_in clientaddr) { char buffer[16]; inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,buffer,sizeof(clientaddr)); unsigned short port = ntohs(clientaddr.sin_port); printf("client ip:%s (%d)\n",buffer,port); } int main(int argc,char *argv[]) { if(argc < 2) { fprintf(stderr,"usage: %s port\n",argv[0]); exit(1); } //创建套接字 sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd < 0) { fprintf(stderr,"socket: %s\n",strerror(errno)); exit(1); } //设置IP和端口 struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(atoi(argv[1])); addr.sin_addr.s_addr = INADDR_ANY; //绑定IP和端口 int len = sizeof(addr); if(bind(sockfd,(struct sockaddr*)&addr,len) < 0) { fprintf(stderr,"bind: %s\n",strerror(errno)); exit(1); } //开始听 if(listen(sockfd,10) < 0) { fprintf(stderr,"listen: %s\n",strerror(errno)); exit(1); } while(1) { struct sockaddr_in clientaddr; int c_len = sizeof(clientaddr); int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&c_len); if(fd < 0) { fprintf(stderr,"accept: %s\n",strerror(errno)); continue; } out_client(clientaddr); do_service(fd); close(fd); } return 0; }
编译:
gcc -o server server.c
运行:
./server 6666
客户端:
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> int sockfd; int main(int argc,char *argv[]) { if(argc < 3) { fprintf(stderr,"usage: %s port\n",argv[0]); exit(1); } sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd < 0) { fprintf(stderr,"socket:%s\n",strerror(errno)); exit(1); } struct sockaddr_in sockaddr; memset(&sockaddr,0,sizeof(sockaddr)); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(atoi(argv[2])); inet_pton(AF_INET,argv[1],&sockaddr.sin_addr.s_addr); socklen_t len = sizeof(sockaddr); if(connect(sockfd,(struct sockaddr*)&sockaddr,len) < 0) { fprintf(stderr,"connect: %s\n",strerror(errno)); exit(1); } char buffer[1024]; memset(buffer,0,sizeof(buffer)); ssize_t n; if((n = read(sockfd,buffer,1024)) < 0) { fprintf(stderr,"read: %s\n",strerror(errno)); exit(1); } else { printf("%s\n",buffer); } return 0; }
编译:
gcc -o client client.c
运行:
./client 192.168.0.30 6666
相关文章推荐
- Socket编程下篇-----TCP协议的C/S案例
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- TcpSocket编程与Event编写学习的好例子
- 基于TCP(面向连接)的socket编程例子
- 基于TCP的socket编程
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- socket与TCP/UDP编程
- socket与TCP/UDP编程~
- socket与TCP/UDP编程~
- socket与TCP/UDP编程
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- Socket编程例子 - TCP Shell.c
- socket编程例子:TCP Shell后门
- 常用类之TCP连接类-socket编程
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- socket编程例子:TCP Shell后门
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- socket编程例子:TCP Shell后门
- linux网络socket编程客户端端(tcp/udp)