Python使用socket创建TCP服务器和客户端

python使用socket创建tcp服务器和客户端,实现以下目的:

1.使用python中的socket模块中包含TCP协议的方法实现客户端和服务端间的通信

2.理解socket中TCP协议和UDP协议之间方法的区别

3.实现简单的数据传输(文本,图片)

socket库方法参数说明

操作结果备注
socket.socket( family, type )创建socket实例对象; family参数代表地址家族,可为AF_INET或AF_UNIX。type参数代表套接字类型,可为SOCK_STREAM(TCP流套接字)和SOCK_DGRAM(UDP数据报套接字)family : {AF_INET:Internet地址; AF_UNIX:同一台机器上的进程间通信 };SOCK_STREAM: (TCP流套接字); SOCK_DGRAM:UDP数据报套接字
server_socket.bind(server_address)将socket绑定到指定IP地址端口号;server_address:格式为元组 (host,port)host代表主机,port代表端口号
server_socket.listen(serverNum)使用socket套接字的listen方法接收连接请求 ;serverNum参数表示指定最多允许多少个客户连接到服务器serverNum的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求
server_socket.accept()务器套接字通过socket的accept方法等待客户请求一个连接;返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址调用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器
connection.send(bytes(msg, ‘utf-8’))服务器调用send,并采用字符串形式向客户发送信息,返回已发送的字符个数。

服务端代码 

**第一步: 调用socket构造函数 socket.socket( family, type ),创建socket对象**
	server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

**第二步:将socket绑定到指定地址, address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号**
	server_address = ('127.0.0.1', 8080)
	server_socket.bind(server_address)

**第三步:使用socket套接字的listen方法接收连接请求  参数表示指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求**
	server_socket.listen(5)

**第四步:服务器套接字通过socket的accept方法等待客户请求一个连接**
	connection, address = server_socket.accept()
    
 **第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数**
 connection.send(bytes(msg, 'utf-8'))
import socket
from time import ctime

print("=====================时间戳TCP服务器=====================");

HOST = ''  # 主机号为空白表示可以使用任何可用的地址。
PORT = 21567  # 端口号
BUFSIZ = 1024  # 接收数据缓冲大小
ADDR = (HOST, PORT)

tcpSerSock = socket(socket.AF_INET, socket.SOCK_STREAM)  # 1.创建TCP服务器套接字
tcpSerSock.bind(ADDR)  # 2.套接字与地址绑定
tcpSerSock.listen(5)  # 3.监听连接,同时连接请求的最大数目

while True:
    print('等待客户端的连接...')
    tcpCliSock, addr = tcpSerSock.accept()  # 4.接收客户端连接请求
    print('取得连接:', addr)

    while True:
        data = tcpCliSock.recv(BUFSIZ)  # 连续接收指定字节的数据,接收到的是字节数组
        if not data:  # 如果数据空白,则表示客户端退出,所以退出接收
            break
        tcpCliSock.send('[%s] %s' % (ctime(), data))  # 5.向客户端发送时间戳数据

    tcpCliSock.close()  # 关闭与客户端的连接

tcpSerSock.close()  #关闭服务器socket

 客户端代码


from socket import *

print("=====================TCP客户端=====================");

HOST = '127.0.0.1'  # 服务器ip地址,等价于localhost
PORT = 21567  # 通信端口号
BUFSIZ = 1024  # 接收数据缓冲大小
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)  # 创建客户端套接字
tcpCliSock.connect(ADDR)  # 发起TCP连接

while True:
    data = input('> ')  # 接收用户输入
    if not data:  # 如果用户输入为空,直接回车就会发送"",""就是代表false
        break
    tcpCliSock.send(bytes(data, 'utf-8'))  # 客户端发送消息,必须发送字节数组
    data = tcpCliSock.recv(BUFSIZ)  # 接收回应消息,接收到的是字节数组
    if not data:  # 如果接收服务器信息失败,或没有消息回应
        break
    print(data.decode('utf-8'))  # 打印回应消息,或者str(data,"utf-8")

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值