Linux 下socket编程客户端与服务端代码
来源:互联网 发布:少林功夫 知乎 编辑:程序博客网 时间:2024/05/16 11:30
客户端代码:
/* client */#include <stdio.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <netdb.h>#include <unistd.h>#include <string.h>#include <arpa/inet.h>#include <errno.h>#define PORT 8848#define MAXDATASIZE 100int main(int argc, char *argv[]){ char hostname[100]; gethostname(hostname,sizeof(hostname)); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%s\n",hostname); int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in serv_addr; if (argc != 2) { fprintf(stderr, "usage: cilent hostname\n"); return 0; } if ((he = gethostbyname(argv[1])) == NULL) { fprintf(stderr, "gethostbyname error!\n"); return 0;; } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "socket error!\n"); return 0; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); serv_addr.sin_addr = *((struct in_addr *)he->h_addr); bzero(&(serv_addr.sin_zero), 8); if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) { fprintf(stderr, "connect error!\n"); return 0; } if ((numbytes = read(sockfd, buf, MAXDATASIZE)) == -1) { fprintf(stderr, "read error!\n"); return 0; } buf[numbytes] = '\0'; printf("Received: %s", buf); close(sockfd);}服务器端代码:
/* server */#include <stdio.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <netdb.h>#include <unistd.h>#include <string.h>#include <arpa/inet.h>#include <sys/wait.h>#include <errno.h>#define PORT 8848#define BACKLOG 10int main(void){ int sockfd, conn_fd; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "socket error!\n"); return 0; } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(PORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero), 8); if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { fprintf(stderr, "bind error!\n"); return 0; } if (listen(sockfd, BACKLOG) == -1) { fprintf(stderr, "listen error!\n"); return 0; } while (1) { sin_size = sizeof(struct sockaddr_in); if ((conn_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) { fprintf(stderr, "accept error!\n"); continue; } printf("server: got connection from %s\n", inet_ntoa(their_addr.sin_addr)); if (!fork()) { if (send(conn_fd, "Hello, world!\n", 14, 0) == -1) fprintf(stderr, "send error!\n"); close(conn_fd); return 0; } close(conn_fd); while(waitpid(-1, NULL, WNOHANG) > 0); }}
- Linux 下socket编程客户端与服务端代码
- Linux 下socket编程客户端与服务端代码
- Linux 下socket编程客户端与服务端代码
- Socket编程服务端和客户端代码
- Linux下Socket服务器与客户端编程
- Linux socket客户端编程--验证libevent服务端
- socket 编程之TCP服务端与客户端
- C# Socket编程 服务端与客户端(一)
- C# Socket编程 服务端与客户端(二)
- C# Socket编程 服务端与客户端(四) 异步服务端
- Socket客户端与服务端
- Linux环境下 UDP服务端/客户端代码
- Windows下C++服务端和客户端Socket通信简单代码
- Windows下C++服务端和客户端Socket通信简单代码
- Socket编程_tcp客户端服务端
- C# socket 服务端与客户端通信演示代码
- C# socket 服务端与客户端通信演示代码
- 用C++编写的SOCKET服务端与客户端代码实例
- js 键盘按键检测
- Spring MVC 学习笔记 controller与requestmapping
- 什么是内部类?Static Nested Class 和 Inner Class的不同。
- 程序员的七种武器
- GL账户描述获取方法
- Linux 下socket编程客户端与服务端代码
- 关于ubuntu输入法的无法正常显示(不显示或者只显示禁止的小圆圈)
- 毕业5年决定你的命运 --------值得所有不甘平庸的人看看
- //功能:讲解继承
- 唐骏的秘密:我从最后一名开始努力
- 腾讯与新浪微博是如何引导新用户的?
- 优秀程序员的十个习惯
- 方法的重载
- bitset