Python网络编程-Socket简单通信

Posted yaoxing365

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络编程-Socket简单通信相关的知识,希望对你有一定的参考价值。

学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅。

先介绍下TCP的三次握手:

技术分享图片 技术分享图片

 

1,简单的发送消息:

服务器端:

import socket

sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
print("正在进行等待接受数据...")
conn, address = sk.accept()
msg = "hello world!"
conn.send(msg.encode())
conn.close()

客户端:

import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)
data = client.recv(1024)
print(data.decode())

这里并不能连续发送消息,一次连接发送消息后程序终止。

2.1,连续的发送消息(TCP方式

服务器端:

import socket
import random
sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
while True:
    print("正在进行等待接受数据...")
    conn, address = sk.accept()
    msg = "hello world!"
    conn.send(msg.encode())
    while True:
        data=conn.recv(1024)
        print(data.decode())
        if data==bexit:
            break
        conn.send(data)
        conn.send(str(random.randint(1,1000)).encode())
    conn.close()

客户端:

import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)

while True:
    data = client.recv(1024)
    print(data.decode())
    msg_input=input("please input mesage to send...")
    client.send(msg_input.encode())
    if msg_input== bexit:
        break
    data = client.recv(1024)
    print(data.decode())

使用while函数,来连续的发送消息。

2.2,连续的发送消息(UDP方式

服务器端:

import  socket

#定义udp方式
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
sk.bind(ip_port)

while True:
    data=sk.recv(1024)
    print(data.decode())

客户端:

#udp
import  socket

sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
while True:
    msg_input=input("please input message to send...")
    if msg_input==bexit:
        break
    sk.sendto(msg_input.encode(),ip_port)
sk.close()

3,多客户端发送消息(TCP方式)

服务器端:

#tcp
import  socketserver
import random

class MyServer(socketserver.BaseRequestHandler):
    def setup(self):
        pass
    def handle(self):
        conn=self.request
        msg="hello world!"
        conn.send(msg.encode())
        while True:
            data= conn.recv(1024)
            print(data.decode())
            if data== bexit:
                break
            conn.send(data)
            conn.send(str(random.randint(1,1000)).encode())
        conn.close()

    def finish(self):
        pass

if __name__=="__main__":
    server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer)
    server.serve_forever()

客户端:

#tcp
import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)

while True:
    data = client.recv(1024)
    print(data.decode())
    msg_input=input("please input mesage to send...")
    client.send(msg_input.encode())
    if msg_input== bexit:
        break
    data = client.recv(1024)
    print(data.decode())

 启动服务器端后,服务器端等待客户端程序连接,我们可以启动多个客户端来连接服务器端。

 

注:内容来源于互联网

以上是关于Python网络编程-Socket简单通信的主要内容,如果未能解决你的问题,请参考以下文章

Python的网络编程socket

python,socket网络编程,最简单的server端和client端代码

Python 之 Socket编程(TCP/UDP)

Python socket通信~简单实例

游戏开发实战Unity使用Socket通信实现简单的多人聊天室(万字详解 | 网络 | TCP | 通信 | Mirror | Networking)

游戏开发实战Unity使用Socket通信实现简单的多人聊天室(万字详解 | 网络 | TCP | 通信 | Mirror | Networking)