首页 > 其他分享 >Learn by testing: Unix socket 如何通信?

Learn by testing: Unix socket 如何通信?

时间:2022-12-01 14:07:54浏览次数:63  
标签:tmp nc socket demo testing sock unix Unix

本文参考communicate with unix sockets做了一些简单的测试,了解unix socket是如何通信的。

创建一个tcp socket

创建一个unix socket,命令不会返回,会一直等待:

# nc -U /tmp/demo.sock -l   
## nc, which is short for netcat. 
##-l listen
## -U, --unixsock             Use Unix domain sockets only
##     --vsock                Use vsock sockets only

第二个终端查看这个socket的类型是STREAM,以及它的状态是listen。关于tcp和udp的socket的区别,不同于网络里面的tcp和udp,参考difference-between-unix-domain-stream-and-datagram-sockets

# lsof /tmp/demo.sock
##the lsof command is a utility used to list and give information about files that are in use by processes.
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
nc      644501 root    3u  unix 0xffff9b20795e2200      0t0 6951183 /tmp/demo.sock type=STREAM (LISTEN)

第二个终端用nc与这个socket通信:

# nc -U /tmp/demo.sock
test

这两个终端就会像管道一样,一端写另一端会同步显示,两边的内容总是一样的,都可以写,都可以收到。此时,第三个终端查看现在的状态已经是connected:

# lsof /tmp/demo.sock
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
nc      644501 root    4u  unix 0xffff9b20791eee80      0t0 6951184 /tmp/demo.sock type=STREAM (CONNECTED)

创建一个udp的socket:

# nc -U /tmp/demo.socku  -u -l
## -u代表udp

第二个终端查看,是DGRAM类型的,状态是unconnected:

# lsof /tmp/demo.socku
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
nc      36400 root    3u  unix 0xffff9441bcb54c80      0t0 3613087 /tmp/demo.socku type=DGRAM (UNCONNECTED)

第二个终端,使用这个socket开始传输一些数据,跟tcp的一样。

第三个终端,查看socket状态是connected

# lsof /tmp/demo.socku
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
nc      644563 root    3u  unix 0xffff9b2068958cc0      0t0 6951191 /tmp/demo.socku type=DGRAM (CONNECTED)

当server 端kill以后,继续输入内容,tcp:

# nc -U /tmp/demo.sock
test
you
sdfsdfsdf
sdfsdf
Ncat: Broken pipe.

当server端kill以后,继续输入内容,udp:

# nc -u  /tmp/demo.socku -U
ste
sdf
Ncat: Connection refused.

标签:tmp,nc,socket,demo,testing,sock,unix,Unix
From: https://blog.51cto.com/u_15288977/5901834

相关文章

  • UT026010 Buffer pool was not set on WebSocketDeploymentInfo...
    UT026010:BufferpoolwasnotsetonWebSocketDeploymentInfo,thedefaultpoolwillbeused一、解决方案:在引入undertow包时剔除undertow-websockets-js包,启动无警......
  • Web服务器2-socket实现web服务器
    实验要求基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:Web服务器的客户端服务器,提交程序运行截图实现GET即可,请求,响应要符合HTTP协议规范服务器部署到华......
  • 实验四 Web服务器1-socket编程
    实验四Web服务器1-socket编程ipa查询网络状态echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来的内容加入“服务器进程pid你的学号姓名echo:”......
  • python的socket模块
        socket参数使用##socket参数使用参数一:地址簇socket.AF_INETIPv4(默认)socket.AF_INET6IPv6socket.AF_UNIX只能够用于单一的Unix系统......
  • 实验四 Web服务器1-socket编程
    任务详情基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:time服务器的客户端服务器,提交程序运行截图echo服务器的客户端服务器,提交程序运行截图,服务器把客......
  • Web服务器1-socket编程
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:time服务器的客户端服务器,提交程序运行截图echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来......
  • 实验四 Web服务器1-socket编程
    任务详情基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.time服务器的客户端服务器,提交程序运行截图2.echo服务器的客户端服务器,提交程序运行截图,服务器......
  • socket
    socket1.任务详情基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:time服务器的客户端服务器,提交程序运行截图echo服务器的客户端服务器,提交程序运行截图,......
  • web服务器1-socket编程
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:time服务器的客户端服务器,提交程序运行截图echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来......
  • Web服务器1-socket编程
    Web服务器1-socket编程1.time服务器的客户端服务器2.echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来的内容加入“服务器进程pid你的学号姓名......