python經過套接字來發送接收消息

案例以下:html

一、啓動一個服務端套接字服務python

二、啓動一個客戶端套接字服務socket

三、客戶端向服務端發送一個hello,服務端則回覆一個word,並打印spa

參考地址:http://www.javashuo.com/article/p-uyntysqy-a.htmlcode

服務端代碼:server

#coding:utf-8

import socket
import time

class Server:
    def __init__(self,host,port):
        self.port = port
        self.host = host
        self.status = 0
        self.BUF_SIZE = 1024

    def createServer(self):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server.bind((self.host, self.port))

    def startServer(self):
        self.status = 1
        self.createServer()
        #設置接收的鏈接數爲1
        self.server.listen(1)
        client, address = self.server.accept()
        while self.status == 1:  # 循環收發數據包,長鏈接
            data = client.recv(self.BUF_SIZE)
            text = data.decode()
            if text != "":
                print(text)  # python3 要使用decode
                client.send("world".encode())
                # client.close() #鏈接不斷開,長鏈接

if __name__ == "__main__":
    server = Server("localhost",8083)
    server.createServer()
    server.startServer()

客戶端代碼:htm

#coding:utf-8

import socket
import time
import threading


class Client:
    def __init__(self,host,port):
        self.port = port
        self.host = host
        self.status = 0
        self.BUF_SIZE = 1024

    def connect(self):
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)  # 在客戶端開啓心跳
        self.client.connect((self.host, self.port))

    def send(self,mes):
        client.startResv()
        while True:
            self.client.send(mes.encode())
            time.sleep(1)  # 若是想驗證長時間沒發數據,SOCKET鏈接會不會斷開,則能夠設置時間長一點

    def resv(self):
        while True:
            data = self.client.recv(self.BUF_SIZE)
            text = data.decode()
            print(text)

    def startResv(self):
        t = threading.Thread(target=self.resv)
        t.start()




    def close(self):
        self.client.close()


if __name__ == "__main__":
    client = Client("localhost",8083)
    client.connect()
    client.send("hello")

 運行以下圖:blog

  

相關文章
相關標籤/搜索