一个简单的基于TCP通信的服务器端与客户端程序

一,概述

在这里插入图片描述

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,再运行客户端程序:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/dangfulin/article/details/107640513