TCP程序流程及服务器客户端

 

Tcp服务器创建:

import socket

 

# 服务器的端口号

PORT = 9000

 

# 创建套接字socket对象,用于进行通讯

# scoket.SOCK_STREAM 表明使用tcp协议,流式协议

# 监听socket

server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

 

# 为服务器的socket绑定一个固定的地址,ip和端口,元祖

address = ("", PORT)

server_sock.bind(address)

 

# 让服务器开启监听,可以收到客户端的连接请求

#listen参数表示监听队列的大小,最多能同时处理三次握手的客户端数量

server_sock.listen(128)

 

# 接受客户端的连接请求,与客户端完成三次握手

# accept函数是阻塞,如果当前没有客户端发起连接,则会阻塞等待直到有客户端发起连接

# new_sock是一个新的socket对象,用来跟这个连接的客户端进行一对一数据传输使用

# client_addr是建立连接的客户端的地址,ip和端口  元祖

new_sock, client_addr = server_sock.accept()

 

# print("客户端 %s 已经建立了连接"% str(client_addr))

print("客户端 %s 已经建立了连接" % (client_addr,))

 

# 接收客户端的数据

recv_data = new_sock.recv(1024)

 

print("接收到了客户端 %s 传来的数据: %s" % (client_addr, recv_data.decode()))

 

# 向客户端发送数据

 

msg = input("请输入要传给客户端的数据:")

 

new_sock.send(msg.encode())

 

# 如果没有数据再传给客户端,可以关闭连接

new_sock.close()

 

# 如果不想再接收新的客户端的连接请求,可以关闭server_sock

server_sock.close()

测试:

我们暂时还没有写tcp客户端,可以用nc命令来作为客户端进行测试。

# nc 服务器的IP 服务器的端口
nc 127.0.0.1 8000

 

TCP客户端创建:

import socket

 

# 创建socket对象,用于通信

client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

 

# 对于客户端,可以不用绑定一个固定地址,使用操作系统分配的即可

 

# 向服务器发起连接请求, 并完成三次握手

server_addr = ("127.0.0.1", 9000)

client_sock.connect(server_addr)

 

# 向服务器发送数据

msg = input("请输入要发送的数据:")

client_sock.send(msg.encode())

 

# 接收服务器传回来的数据

recv_data = client_sock.recv(1024)

print("收到了由服务器传回的数据:%s" % recv_data.decode())

 

# 如果客户端不想再次发送数据,可以关闭连接

client_sock.close()

 

测试:

可以用我们刚才写的服务器程序,也可用nc命令进行测试

# -l参数表示服务器监听
# nc -l 绑定的服务器ip 端口
nc -l 127.0.0.1 8000

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-11
  • 2021-11-13
  • 2021-05-05
  • 2022-12-23
猜你喜欢
  • 2021-12-12
  • 2022-12-23
  • 2022-12-23
  • 2021-07-16
  • 2022-12-23
  • 2022-01-28
  • 2021-06-28
相关资源
相似解决方案