欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-23 09:07:17
666...

一,概述

一个简单的基于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,先运行服务器端程序:

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

2,再运行客户端程序:

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

本文地址:https://blog.csdn.net/dangfulin/article/details/107640513