【Socket】linux套接字技术之tcp
1.mystery引入
2)网络的本质就是资源共享,当前流行的P2P应用正好暗合了这种精神。
3)当前流行的Web服务,其标准协议是HTTP,很多从事Web应用程序开发的开发者,从事的就是这种应用的网络编程,所采用的开 发模式是浏览器/服务器结构,也称为B/S结构 。
4)B/S结构是C/S结构的一个变种,是指开发者不需要开发独立的客户端软件,浏览器就是此时的客户端,开发者只需要在服务器端编写并部署脚本,资源请求者就可以通过URL进行访问了。
5)Socket提供一种原始套接字机制,能够让开发者直接操纵IP层。
6)利用Socket编程还可以编写出广播和组播应用程序。
7)广播是指向当前局域网所有的在线主机发送数据,ARP协议就是利用广播机制。
8)组播相对广播,也可了理解为广播的一个子集,类似于QQ中的群。
2.源码
服务端:
//TCPServer.c #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #define SERVER_PORT 5555 main() {int serverSocket;struct sockaddr_in server_addr;struct sockaddr_in clientAddr;int addr_len = sizeof(clientAddr);int client;char buffer[1024];int iDataNum ;if((serverSocket = socket(AF_INET,SOCK_STREAM,0)) < 0){perror("socket");exit(1);}bzero(&server_addr,sizeof(server_addr));server_addr.sin_family =AF_INET;server_addr.sin_port = htons(SERVER_PORT);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0){perror("connect");exit(1);}if(listen(serverSocket,5)<0){perror("listen");exit(1);}while(1){client = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len);if(client < 0){perror("accept");continue;}iDataNum = recv(client,buffer,1024,0);if(iDataNum < 0){perror("Recv");continue;}printf("\nRecv client data.......\n");printf("IP is %s\n",inet_ntoa(clientAddr.sin_addr));printf("Port is %d\n",htons(clientAddr.sin_port));printf("Recv Data is %s\n",buffer);send(client,buffer,sizeof(buffer),0);} }
View Code
//TCPClient.c #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> main() {struct sockaddr_in serverAddr;int clientSocket;char sendbuf[200];char recvbuf[200];if((clientSocket=socket(AF_INET,SOCK_STREAM,0)) < 0){perror( "socket error" );return -1;}serverAddr.sin_family=AF_INET;serverAddr.sin_port=htons(5555);serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < 0){perror("connect");exit(1);}printf("connect with destination host.....\n");while(1){printf("Input your World:>");scanf("%s",sendbuf);printf("\n");if(strcmp(sendbuf,"quit") == 0)break;send(clientSocket,sendbuf,sizeof(sendbuf),0);recv(clientSocket,recvbuf,200,0);printf("recv data of my world is: %s\n",recvbuf);}close(clientSocket);return 0; }
View Code
3.mystery注解
1) addr_in存储主机IP地址
2)sockaddr_in用于表示Internet协议簇地址结构
3)sockaddr存储主机IP地址与接口信息
4)addr_in是一个结构体,其中包含一个联合体,其中结构体s_un_b中的4个字段s_b1/s_b2/s_b3/s_b4分别对应IP地址点分法下的4个 值
5)inet_addr()函数的作用是将字符形式的IP地址转换成整数值
6)htons()和htonl()函数用于字节序的转换,表示将数值从主机字节序转换成网络字节序
7)htons()函数是16字节序转换
8)htonl()函数是32字节序转换
【Socket】linux套接字技术之tcp相关推荐
- linux网络编程Internet Socket地址,套接字,和函数
文章内容节选<linux/UNIX 系统网络编程> Internet domain socket地址有两种:IPv4 IPv6 IPv4被存储在结构体中, 该结构体在 netinet/in ...
- 网络编程(part9)--socket套接字编程之TCP套接字
鄙人学习笔记 文章目录 套接字介绍 定义 套接字分类(针对TCP和UDP的分类) TCP套接字编程 服务端流程 代码实现 举个例子 客户端流程 代码实现 举个例子 TCP套接字数据传输特点 做个练习 ...
- Python网络编程——socket套接字实现UDP/TCP信息传输
socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...
- Mac用Xcode建立TCP和UDP Socket(套接字)编程
TCP和UDP均采用自己电脑,既做服务器端又做客户端,当然Xcode无法同时运行两个Target,所以可以选择一个在终端,一个在Xcode,或者两个都在终端. TCP服务器端: #include< ...
- Linux 套接字编程中的 5 个隐患
Linux 套接字编程中的 5 个隐患 (2011-05-03 17:50) 分类: Socket编程 在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的 ...
- iOS - Socket 网络套接字
1.Socket 套接字 所谓 Socket,通常称为 "套接字",网络应用程序通过套接字向网络发送请求或者应答网络请求.Socket 通常用于描述 IP 地址和端口,是应⽤层与 ...
- linux 套接字选项定义
2019独角兽企业重金招聘Python工程师标准>>> linux 套接字选项定义 2011-07-28 14:31 1.closesocket(一般不会立即关闭而经历TIME_WA ...
- Linux套接字聊天
Linux套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行. 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和 ...
- Socket(套接字)详解 画图+实例
Socket概念 Socket本意为"插座",在Linux下,用于表示进程间网络通信的特殊文件类型,本质为内核借助缓冲区形成的伪文件. 既然是文件,那肯定就可以使用文件描述符引用套 ...
最新文章
- CodeSmith实用技巧(十四):使用Progress对象
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile...
- killall 后面信号_Linux 下使用 killall 命令终止进程的 8 大用法
- poj 2236 WirelessNetwork 并查集
- android 本地 播放器,Android 本地播放器
- mysql 特殊函数_mysql 的特殊函数
- apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现
- centos7连接华为san存储_centos7配置nfs共享存储服务
- 强化学习各概念整理(value/policy-based、on/off-policy、model-based/free、offline)
- 计算机五笔教案ppt,计算机基础课件五笔打字.ppt
- docker daemon配置阿里云加速器
- Introduction to Computer Networking学习笔记(二十):TCP拥塞控制-基本方法 AIMD
- 原生js实现表单的正则验证,所有验证都通过后提交按钮才可用
- 计算机ppt以学校生活为主题的作文,校园生活为话题的作文(精选10篇)
- 通过实例彻底理解闭包
- Windows Azure 解决方案系列: Real World Windows Azure: 与微软杰出工程师, Sean Nolan的访谈...
- 求最大公约数c语言实验心得,C语言编程实训报告(合集)
- 反诈中心拦截网站域名措施与申诉方法
- [Zookeeper] 安装and各 配置参数详解
- 关于公网摄像机直播公网视频直播的基本思考方法
热门文章
- mysql主从切换gtid不一致_解决mysql使用GTID主从复制错误问题
- godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
- 笔记-项目整体管理-项目管理计划
- 常见数控机床的数据采集方法比较
- CentOS7中卸载Docker
- Java中Socket通信-客户端向服务端发送照片
- 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin.password
- Pytyon3中实现十进制转不同进制
- SSM+BJUI实现添加和编辑共用一个页面
- 使用 Gitee 进行代码管理(包括本地仓库如何同时关联Git和Gitee)