一个简单的基于TCP通信的服务器端与客户端程序
程序员文章站
2022-06-22 23:09:32
666...
一,概述
1,客户端:
创建客户端套接字对象
和服务端套接字建立连接
发送数据
接收数据
关闭客户端套接字
2,服务器端:
创建服务端端套接字对象
绑定端口号
设置监听
等待接受客户端的连接请求
接收数据
发送数据
关闭套接字
二,客户端
1,创建客户端套接字对象
导入import socket;
创建客户端 socket 对象 socket.socket(AddressFamily, Type),其中:
- AddressFamily表示IP地址类型, 分为TPv4和IPv6,
- Type 表示传输协议类型,
- 具体参数参见Socket families;
2,客户端套接字对象的方法
- connect((host, port)) 表示和服务端套接字建立连接, host是服务器ip地址,port是应用程序的端口号,
- send(data) 表示发送数据,data是二进制数据,
- recv(buffersize) 表示接收数据, buffersize是每次接收数据的长度,
- 具体方法参见Socket objects have the following methods;
3,客户端程序
import socket
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建客户套接字
sk.connect(('127.0.0.1', 8898)) # 尝试连接服务器
send_data = "你好服务端,我是客户端小黑!".encode("gbk")
sk.send(send_data)
print(send_data.decode('gbk'))
rev = sk.recv(1024) # 对话(发送/接收)
rev = rev.decode('gbk')
print(rev)
sk.close() # 关闭客户套接字
三,服务器端
1,创建客户端套接字对象
导入import socket;
创建客户端 socket 对象 socket.socket(AddressFamily, Type)
2,服务器端套接字对象的方法
- bind((host, port)) 表示绑定端口号, host 是 ip 地址,port 是端口号,ip
地址一般不指定,表示本机的任何一个ip地址都可以。 - listen (backlog) 表示设置监听,backlog参数表示最大等待建立连接的个数。
- accept() 表示等待接受客户端的连接请求
- send(data) 表示发送数据,data 是二进制数据
- recv(buffersize) 表示接收数据, buffersize 是每次接收数据的长度
3. 服务器端程序
import socket
if __name__ == '__main__':
count = 0
while True:
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.bind(('127.0.0.1', 8898)) # 把地址绑定到套接字
print("server:正在监听......")
sk.listen(12) # 监听链接
conn, addr = sk.accept() # 接受客户端链接
ret = conn.recv(1024) # 接收客户端信息
ret = ret.decode("gbk")
print(ret) # 打印客户端信息
count += 1
send_data = "你好客户端,我是服务器端小白!这是你第{}次向我打招呼".format(count).encode("gbk")
conn.send(send_data) # 向客户端发送信息
conn.close() # 关闭客户端套接字
sk.close() # 关闭服务器套接字(可选)
四,程序运行
1,先运行服务器端程序:
2,再运行客户端程序:
本文地址:https://blog.csdn.net/dangfulin/article/details/107640513