linux网络编程1
netstat -apn | grep 端口号 可以查看指定端口号的占用情况
socket:
大小端存储法:
网络字节序:
ip地址转换函数
socketaddr:
流程图:客户端不需要bind,可由客户机随机分配一个(隐式绑定),而服务器一定要显示绑定,否则客户端找不到对象。(客户端比作学生,住哪个宿舍无所谓,服务器比作教室,每天一定要在这个教室上课。)
bind:往socket上绑定ip和端口号
listen函数指定同时能有多少个客户端能与我建立连接,即处于3次握手队列的连接数之和
socket:
bind:
listen:
accept:accept()系统调用主要用在基于连接的套接字类型,比如SOCK_STREAM和SOCK_SEQPACKET。它提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符。新建立的套接字不在监听状态,原来所监听的套接字也不受该系统调用的影响。
connect:
代码:
服务器端:图中一句话错了,是调用accept就阻塞监听,而不是listen,listen只是设置最大连接个数
加上打印客户端ip和端口号的功能,以及每次重置serv_addr的功能:
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
inet_pton(AF_INET,"192.168.42.100",&serv_addr.sin_addr.s_addr);
这两种方法是等价的,(假设指定本机ip为192.168.42.100
客户端程序:
应该加上返回值判断,处理各个函数调用的出错情况
特别注意read函数的返回值情况:
半关闭:
time_wait状态时服务还能再次启动,要用到端口复用技术。