首页 > 编程语言 > 详细

python-socket编程

时间:2020-04-27 12:45:05      阅读:63      评论:0      收藏:0      [点我收藏+]

socket针对tcp编程,

用于客户端和服务端之间的数据交互。

1、基本代码框架如下:

技术分享图片

特点:

1)双向通信功能:服务端、客户端都可以发送和接收数据

2)accept和recv是阻塞的

 

2、一个客户端通信的代码

1)服务端

‘‘‘
总结:
1、服务端要先启动,不然客户端启动后,找不到服务端的地址,会报错。
2、服务端启动后,阻塞到accept,等待有客户端连接。当有客户端连接以后,会阻塞到recv,直到收到客户端的消息。
3、accept和recv方法会阻塞,直到客户端或服务端执行了某操作,形成你来我往的通信。
4、发送数据需要将数据编码(encode)成bytes类型,接收到的数据需要解码
‘‘‘

import socket

server = socket.socket()
server.bind((127.0.0.55, 8083))  # 绑定服务器地址 + 端口
server.listen()  # 监听

sk, addr = server.accept()  # 服务器与客户端建立连接。阻塞的,如果没有建立连接,就一直等待在这儿。如果想一个服务器与多个客户端建立连接,需要使用多线程。
print(客户0连接成功)
while True:  # 通过循环,取大于1024的数据,即:将大于1024的数据接收完成
    ‘‘‘实现双向通信‘‘‘
    sk.send(Welcome to server!.encode(utf8))  # 连接成功后服务器向客户端发送信息,利用accept到的sk
    temp_data = sk.recv(1024)  # recv方法是阻塞的。1024是默认的,表示一次接收的最大数据长度,可以省略。可以设置为其他值,最大值根据操作系统的不同,由TCP协议定。
    print(temp_data.decode(utf8))  # 将接收的bytes数据解码成string类型
    # input_data = input()
    input_data = 服务器向客户端传输的数据
    sk.send(input_data.encode(utf8))  # 发送数据需要将数据编码成bytes类型
sk.close()  # 关闭连接

2)客户端

import socket

client = socket.socket()
client.connect((127.0.0.55, 8083))  # 连接服务器,连接成功以后,客户端会阻塞到recv
server_data = client.recv(1024)  # 等待客户端发送消息
print(fServer response: {server_data.decode("utf8")})

while True:
    # input_data = input(‘请输入要想服务器传输的数据:‘)
    input_data = 客户端0第一次传输的数据
    client.send(input_data.encode(utf8))
    server_data = client.recv(1024)
    print(fServer response: {server_data.decode("utf8")})
    break  # 客户端的一次数据传输。可以通过输入不同数据一直传输给服务端。

 

3、多个客户端通信代码

 1)服务端

import socket
import threading


def client_sev(client_name, sk, addr):
    print(f{client_name}连接成功)
    while True:  # 通过循环,取大于1024的数据,即:将大于1024的数据接收完成
        ‘‘‘实现双向通信‘‘‘
        sk.send(Welcome to server!.encode(utf8))  # 连接成功后服务器向客户端发送信息,利用accept到的sk
        temp_data = sk.recv(1024)  # recv方法是阻塞的。1024是默认的,表示一次接收的最大数据长度,可以省略。可以设置为其他值,最大值根据操作系统的不同,由TCP协议定。
        print(temp_data.decode(utf8))  # 将接收的bytes数据解码成string类型
        # input_data = input()
        input_data = f服务器向{client_name}传输的数据
        sk.send(input_data.encode(utf8))  # 发送数据需要将数据编码成bytes类型
    sk.close()  # 关闭连接


server = socket.socket()
server.bind((127.0.0.55, 8083))  # 绑定服务器地址 + 端口
server.listen()  # 监听
while True:
    sk, addr = server.accept()  # 使用多线程,服务端与多个客户端可以同时连接
    client_name = sk.recv(1024).decode(utf8)
    client_thread = threading.Thread(target=client_sev, args=(client_name, sk, addr, ))  # 建立多线程对象
    client_thread.start()  # 启动多线程
    # client_sev(client_name, sk)

2)客户端1

import socket

client = socket.socket()
client.connect((127.0.0.55, 8083))  # 连接服务器,连接成功以后,客户端会阻塞到recv
client.send(客户0.encode(utf8))
server_data = client.recv(1024)  # 等待客户端发送消息
print(fServer response: {server_data.decode("utf8")})

while True:
    # input_data = input(‘请输入要想服务器传输的数据:‘)
    input_data = 客户0第一次传输的数据
    client.send(input_data.encode(utf8))
    server_data = client.recv(1024)
    print(fServer response: {server_data.decode("utf8")})
    break  # 客户端的一次数据传输。可以通过输入不同数据一直传输给服务端。

3)客户端2...

import socket

client = socket.socket()
client.connect((127.0.0.55, 8083))  # 连接服务器,连接成功以后,客户端会阻塞到recv
client.send(客户1.encode(utf8))
server_data = client.recv(1024)  # 等待客户端发送消息
print(fServer response: {server_data.decode("utf8")})

while True:
    # input_data = input(‘请输入要想服务器传输的数据:‘)
    input_data = 客户1第一次传输的数据
    client.send(input_data.encode(utf8))
    server_data = client.recv(1024)
    print(fServer response: {server_data.decode("utf8")})
    break  # 客户端的一次数据传输。可以通过输入不同数据一直传输给服务端。

 

python-socket编程

原文:https://www.cnblogs.com/jaysonteng/p/12729330.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!