网络编程-套接字(scoket)
来源:互联网 发布:杨辉三角c语言程序7行 编辑:程序博客网 时间:2024/04/29 02:51
socket编程
socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。
在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连接的一 对一关 系。 TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socket API。
socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6、UNIX Domain Socket。然而,各种网络协议的地址格式并不相同,如下图所⽰示: sockaddr数据结构
IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位端口号和32位IP地址,IPv6地址用sockaddr_in6结构体表示,包括16位端口号、128位IP地址和一些控制字段。UNIX Domain Socket的地址格式定义在sys/un.h中,用sockaddr_un结构体表示。各种socket地址结构体的开头都是相同的,前16位表示整个结构体的长度(并不是所有 UNIX的实现 都有长度字段,如Linux就没有),后16位表示地址类型。IPv4、IPv6和UNIX Domain Socket的地址类型分别定义为常数AF_INET、AF_INET6、AF_UNIX。这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容。因此,socket API可以接受各种类型的sockaddr结构体指针做参数,例如bind、accept、connect等函数,这些函数的参数应该设计成void *类型以便接受各种类型的指针,但是sock API的实现早于ANSI C标准化,那时还没有void *类型,因此这些函数的参数都用struct sockaddr *类型表示,在传递参数之前要强制类型转换一下。
基于TCP协议的网络协议的一般流程:
虽然server的应用程序终止了,但TCP协议层的连接并没有 完全断开,因此不能再次监听同样的server端口。
server的TCP连接收到client发的FIN段后处于TIME_WAIT状 态。TCP协议规定,主动关闭连接的一方要处于TIME_WAIT状态,等待两个MSL(maximum segment lifetime) 的时间后才能回到CLOSED状态,因为我们先Ctrl-C终止了server,所 以server是主动关闭连接的一方,在TIME_WAIT期间仍然不能再次监听同样的server端 口。MSL在RFC1122中规定为两分钟,但是各操作系统的实现不同,在Linux上一般经过半分钟后 就可以再次启动server 了。
如何解决:
使用setsockopt()设置socket描述符的选项SO_REUSEADDR为1, 表⽰允许创建端口号相同但IP地址不同的多个socket描述符。
int opt = 1;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
- 网络编程-套接字(scoket)
- 网络编程(套接字)
- 网络编程scoket
- Scoket网络编程客户端
- Python 网络编程(套接字编程)
- 网络套接字编程
- ios网络编程之Scoket
- .Net的Scoket网络编程
- ios网络编程之Scoket
- 网络编程(原始套接字)
- 网络编程原始套接字(转)
- linux 网络编程 (套接字)
- Java网络编程-(1)套接字
- 套接字网络编程基础(一)
- 套接字网络编程基础(二)
- 套接字网络编程基础(三)
- 套接字网络编程基础(四)
- TCP套接字网络编程(三)
- hdu Harmony Forever (线段树 )
- metric跃点数含义
- 剑指Offer——回溯算法
- 本地执行sqoop和oozie上执行sqoop命令需要注意
- 232. Implement Queue using Stacks
- 网络编程-套接字(scoket)
- Linux下mysql的安装
- python多线程和协程开发入门上手
- 哈理工OJ 1631 技能修炼(拓扑排序)
- 浅析数据结构与算法7--二叉查找树 及Java实现
- 网络相关概念
- HDU 5805/BC 86B NanoApe Loves Sequence
- POJ 2393 最小瓶颈生成树裸体
- tjut 2825