网络编程套接字


两者的区别与优缺点:

  • udp是面向无链接的不可靠的通信,客户端不需要和服务器建立链接,只需要知道服务器的IP和端口号就可以调用sendto函数向服务器发送请求(此时客户端的socket对应的IP和端口号都会被发送给服务器),服务器通过recvfrom函数调用得知了客户端的IP和端口号,可以向客户端发送信息。udp协议通信简单,效率高,但是可靠性低。
  • tcp是面向链接的,可靠的通信协议。客户端需要与服务器进行三次握手建立链接,服务器端需要创建socket套接字,将套接字与IP和端口号绑定在一起,然后调用listen函数将套接字设置为监听状态,然后调用accept函数等待客户端的链接。accept接收到一个客户端的链接后会,新建一个socket返回,服务器通过read和write函数对socket进行读写操作。客户端则需要通过connect函数与服务器建立链接。链接建立成功后,才能对socket进行读写操作。
  • udp与tcp的服务器均需要将socket与IP和port绑定,但tcp还需要对socket进行listen和accept操作。
  • udp客户端通过sendto发送信息,tcp客户端通过connect与服务器建立链接后,调用write与read进行通信。
  • udp通过sendto发送多少数据,接收端也需要通过recvfrom接受多少数据,不能分次读取。
  • 基于UDP的应用协议有:NFS、TFTP、DHCP、BOOTP、DNS等协议。

关于netstat工具

  • netstat可以显示系统中Internet和UNIX域套接字的状态,当编写套接字程序时,netstat是个非常有用的调试工具,其相关命令参数如下:

  • 显示所有套接字的信息 -a
    只显示监听套接字的信息 -l
    显示进程ID号,以及套接字所归属的程序名称 -p
    显示IP地址,端口号,并以数字形式显示出用户名称 -n
    连续重新显示套接字信息(每秒刷新显示一次) -c
    使用命令如下

  • Proto:表示套接字所使用的协议,例如,tcp或udp
    Recv-Q:表示套接字缓冲区中还未被本地应用读取的字节数
    Send-Q:表示套接字发送缓冲区中排队等待发送的字节数
    Local Address:表示套接字绑定到的地址,以IP:Port的形式表示。默认情况下,主机地址和端口号都以名称形式来显示,如果指定选项-n,会以数值形式显示。地址中主机部分的星号(*)表示这是一个通配IP地址。
    Foreign Address:这是对端套接字所绑定的地址。字符串:表示没有对端地址。
    State:表示当前套接字所处的状态。
  • netstat的输出信息来源于/proc/net目录下的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值