Linux 网络编程(TCP)
- 客户端代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include<unistd.h> #include<netinet/in.h> #include <errno.h> int main(int argc, char** argv){int socketfd = 0;char sendbuf[1024];char recvbuf[1024];struct sockaddr_in server_addr;int port = 8001;int nbytes;if((socketfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == 0){fprintf(stderr, "socket Error:%s\n\a", strerror(errno)); exit(1);}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 = inet_addr("127.0.0.1");if((connect(socketfd, &server_addr, sizeof(server_addr))) == -1){fprintf(stderr, "connect Error:%s\n\a", strerror(errno)); exit(1);}while(1){nbytes = recv(socketfd, recvbuf, sizeof(recvbuf), 0);recvbuf[nbytes] = '\0';printf("recv data is:%s\n",recvbuf);printf("Input:");scanf("%s", sendbuf);send(socketfd, sendbuf, sizeof(sendbuf), MSG_NOSIGNAL); }close(socketfd);exit(0); }
- 服务器端代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include<unistd.h> #include<netinet/in.h> #include <signal.h> #include <errno.h>int main(int argc, char** argv){int old_fd,new_fd;struct sockaddr_in server_addr;struct sockaddr_in client_addr;char recvbuf[1024];int port = 8001;int len,nbytes;if((old_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == 0){fprintf(stderr, "socket Error:%s\n\a", strerror(errno)); exit(1);}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);if((bind(old_fd, &server_addr, sizeof(server_addr))) == -1){fprintf(stderr, "bind Error:%s\n\a", strerror(errno)); exit(1);}//listen的第二个参数backlog为内核缓存队列长度,该队列针对每个监听套接字包含两个队列://一是未完成三次握手的,二是完成三次握手的if(listen(old_fd, 10) == -1){fprintf(stderr, "listen Error:%s\n\a", strerror(errno)); exit(1);}while(1){len = sizeof(struct sockaddr_in);if ((new_fd = accept(old_fd, (struct sockaddr *)&client_addr, &len)) == -1) { fprintf(stderr, "Accept error:%s\n\a", strerror(errno)); exit(1); }while(1){if (send(new_fd, "hello fredric", strlen("hello fredric"), MSG_NOSIGNAL) == -1) { fprintf(stderr, "send error:%s\n", strerror(errno)); exit(1); }nbytes = recv(new_fd, recvbuf, sizeof(recvbuf), 0);recvbuf[nbytes] = '\0';printf("recv data is:%s\n",recvbuf);}close(new_fd);}close(old_fd);exit(0); }
转载于:https://www.cnblogs.com/Fredric-2013/p/4549312.html
Linux 网络编程(TCP)相关推荐
- Linux网络编程——tcp并发服务器(poll实现)
https://blog.csdn.net/lianghe_work/article/details/46535859 想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程--I/ ...
- Linux 网络编程 TCP
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客 ...
- Linux 网络编程——TCP编程
概述 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 具有以下特点: 1)电话系统服务模式的抽象 2) ...
- linux网络编程tcp和udp基本函数调用过程及如何选择
1. socket编程 1.1 概述 TCP是TCP/IP体系中面向连接的传输层协议,它提供全双工和可靠交付的服务.它采用许多机制来确保端到端结点之间的可靠数据传输,如采用序列号.确认重传.滑动窗口等 ...
- Linux网络编程——tcp并发服务器(多进程)
https://blog.csdn.net/lianghe_work/article/details/46503895 一.tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多 ...
- Linux网络编程--TCP中的三次握手和四次挥手
服务器编程和客户端编程的大致流程如下: 三次握手是在客户端中的connect中完成的,具体如下: 那么上述说到的SYN ACK这些是什么东西呢? 上述的截图取自<Linux高性能服务器编 ...
- linux网络编程-----TCP连接及相关问题
c/s模型在建立连接时的流程如下 //服务器端 int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in servaddr; bz ...
- Linux 网络编程——TCP/IP 数据包格式解析
图中括号中的数字代表的是当前域所占的空间大小,单位是bit位. 黄色的是数据链路层的头部,一共14字节 绿色的部分是IP头部,一般是20字节 紫色部分是TCP头部,一般是20字节 最内部的是数据包内容 ...
- Linux网络编程(TCP)
TCP service.c 服务端 #include <stdlib.h> #include <sys/types.h> #include <stdio.h> #i ...
- Linux网络编程 | TCP状态转换【2MSL】
文章目录 一.TCP状态转换 1.半关闭 2.2MSL 一.TCP状态转换 CLOSED:表示初始状态. LISTEN:表示服务器端的某个SOCKET处于监听状态,可连接. SYN_SENT:表示客户 ...
最新文章
- linux 查找大文件
- 使用JMeter录制手机App脚本
- 通过修改注册表实现Windows 隐藏账户
- CSocket类的Receive超时的问题解决方案
- 关于ERP、MES、SFC问题
- PYTHON 函数的返回值
- java中FutureTask的使用
- 利用寄存器进入栈值交换
- Apache2.2整合PHP5.2
- Axure 8 注册码
- 如何将heic格式批量转化jpg
- 信息学奥赛一本通pdf_新手如何参加信息学竞赛NOIP,怎么入门(常见问题解答)?...
- python 英语词频统计_Python实现统计英文文章词频的方法分析
- 宝塔面板强制绑定手机号码解决办法
- Preparing transaction:done Verifying transaction:failed RemoveError:‘requests‘ is a dependency of **
- JAVA 调用中通快递查询物流轨迹接口
- VC 显示 隐藏 工具栏 状态栏
- 问题 C: 考试排名(一)(结构体专题)
- suse linux如何重置密码忘记,SUSE Linux忘记root密码的对策
- 【夜读】不要让今天的懒,成为你明天的难
热门文章
- Failure Groups in ASM
- python的class的__str__()和__repr__()函数
- 栖息在生态办公室,裸心社与USGBC达成战略合作
- 【转】NGUI研究院之三种方式监听NGUI的事件方法(七)
- python常见的特异点
- UVALive5379 UVA270 Lining Up
- iOS 线程安全之@synchronized的用法
- JavaScript中的数组操作
- HTML5 Web app开发工具Kendo UI Web中图像浏览器的使用
- 张三入职遭遇,供入台资企业参考