1. 程式人生 > >Python網絡編程-Socket簡單通信

Python網絡編程-Socket簡單通信

... 簡單 我們 ndt NPU 三次握手 啟動 enc 介紹

學習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簡單通信