Linux网络编程实现客户端服务端收发数据功能
来源:互联网 发布:结构设计软件 编辑:程序博客网 时间:2024/06/05 02:58
客户端代码
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(void){int st = socket(AF_INET, SOCK_STREAM, 0);//初始化socketstruct sockaddr_in addr; // 定义一个IP地址的结构memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;// 设置结构地址类型为TCP/IP地址addr.sin_port = htons(8080); // 制定一个端口号:8080,htons:将short类型从host字节类型转到net字节类型// 将字符类型的IP地址转化为int,赋给addr结构//addr.sin_addr.s_addr = inet_addr("127.0.0.1");addr.sin_addr.s_addr = inet_addr("192.168.10.210");//if (connect(st, (struct sockaddr *)&addr, sizeof(addr)) == -1){printf("connect failed %s\n", strerror(errno));return EXIT_FAILURE;}char s[1024];memset(s, 0, sizeof(1024));strcpy(s, "hello world");if (send(st, s, strlen(s), 0) == -1){printf("send failed %s\n", strerror(errno));}//sleep(100);close(st);return EXIT_SUCCESS;}
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(int arg, char *args[]){int st = socket(AF_INET, SOCK_STREAM, 0); //初始化socketint on = 1;if (setsockopt(st, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1){printf("setsockopt failed %s\n", strerror(errno));return EXIT_FAILURE;}struct sockaddr_in addr; // 定义一个IP地址结构memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET; // 将addr结构的属性定位为TCP/IP地址addr.sin_port = htons(8080); // 将本地字节顺序转化为网络字节顺序addr.sin_addr.s_addr = htonl(INADDR_ANY); // INADDR_ANY代表这个server上所有的地址// 将ip与server程序绑定if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1){printf("bind failed %s\n", strerror(errno));return EXIT_FAILURE;}// server端开始listenif (listen(st, 20) == -1){printf("listen failed %s\n", strerror(errno));return EXIT_FAILURE;}//printf("listen success\n");char s[1024];int client_st = 0;struct sockaddr_in client_addr; // 表示client端的IP地址int i;for (i = 0; i < 5; i++){memset(&client_addr, 0, sizeof(client_addr));socklen_t len = sizeof(client_addr);// accept会阻塞,直到有客户端连接过来,accept返回client的socket描述符client_st = accept(st, (struct sockaddr*) &client_addr, &len);if (client_st == -1){printf("accept failed %s\n", strerror(errno));return EXIT_FAILURE;}/* 第一个版本memset(s, 0, sizeof(1024));if (recv(client_st, s, sizeof(s), 0) == -1){printf("recv failed %s\n", strerror(errno));close(client_st);return EXIT_FAILURE;}printf("revc is %s\n", s);close(client_st);*/// 第二个版/*while (1){memset(s, 0, sizeof(1024));if (recv(client_st, s, sizeof(s), 0) > 0){printf("revc is %s\n", s);} else{printf("recv failed %s\n", strerror(errno));break;}}close(client_st);*/// 第三个版本while (1){memset(s, 0, sizeof(1024));int rc = recv(client_st, s, sizeof(s), 0);// 是阻塞调用if (rc > 0){printf("revc is %s\n", s);} else{if (rc == 0){printf("client socket closed\n");}else{printf("recv failed %s\n", strerror(errno));}break;}}close(client_st);}close(st);return 0;}
makefile文件内容
.SUFFIXES:.c .oCC=gccSRCS1=sock.cSRCS2=server.cOBJS1=$(SRCS1:.c=.o)OBJS2=$(SRCS2:.c=.o)EXEC1=clientEXEC2=serverall: $(OBJS1) $(OBJS2) $(CC) -o $(EXEC1) $(OBJS1) $(CC) -o $(EXEC2) $(OBJS2) @echo '----------------ok------------'.c.o:$(CC) -Wall -g -o $@ -c $<clean:rm -f $(OBJS1)rm -f core*
0 0
- Linux网络编程实现客户端服务端收发数据功能
- Linux网络编程:使用select函数实现socket 收发数据
- Linux网络编程 之 TCP 多线程的服务器和客户端同时收发数据
- Linux网络编程-客户端和服务器端互相收发消息
- 网络编程(15)—— 实现利用管道保存客户端数据的socket服务端
- linux 网络编程:使用两线程实现socket同时收发数据
- linux网络编程:使用多进程实现socket同时收发数据
- linux 网络编程:使用两线程实现socket同时收发数据
- linux网络编程:使用多进程实现socket同时收发数据
- linux 网络编程:使用两线程实现socket同时收发数据
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- linux网络编程之用多线程实现客户端到服务端的通信(基于udp)
- 使用netty进行服务端网络编程及数据高效分发功能实现
- linux网络编程:设置非阻塞socket收发数据
- linux网络编程:设置非阻塞socket收发数据
- java网络编程 (客户端、服务端)
- 网络编程--python实现 简单的服务端和客户端
- PHP学习之路之Smarty模板引擎的引入和简单使用
- 守护进程
- Linux修改主机名
- Leetcode 88. Merge Sorted Array (Easy) (cpp)
- UIView 的渐变色呈现
- Linux网络编程实现客户端服务端收发数据功能
- Java Web学习(6):认识JSP
- PHP SplQueue 队列简介
- linux elasticsearch 安装部署
- 正则匹配字符串中的电话号码
- CentOS上安装jdk
- POSTFIX邮件系统搭建
- 优化查询性能
- Unity资源加载与释放