1. 程式人生 > >python socket編程入門級

python socket編程入門級

數據 bin accept rec host input port 客戶端 list

客戶端

import socket
import time

sk = socket.socket()  # 第一步:創建socket對象
address = (‘127.0.0.1‘, 8080)  # 協議是ip+端口(類型元組)
sk.connect(address)  # 第二步:建立鏈接
while True:
    inp = input(‘客戶端>>>>>>>>>\n‘)
    if inp == ‘exit‘:
        break
    sk.send(bytes(inp, ‘utf8‘))  # 第三步:請求數據
    time.sleep(1)  # low方法防止粘包
    data = sk.recv(1024)  # 接收確認信息
    print("接收服務端的數據", str(data, ‘utf8‘))
sk.close()

  服務端

import socket

# family type
# AF_INET,AF_INET6
# AF_UNIX
# SOCK_STREAM:: TCP
# SOCK_DGRAM :: UDP
# sk只負責綁定端口等待鏈接,發送接收消息用conn。
sk = socket.socket()  # 默認參數tcp
address = (‘127.0.1‘, 8080)
sk.bind(address)  # 綁定ip協議和端口
sk.listen(3)  # 定義最大可以掛起連接數。
print(‘服務的waiting.......‘)
while 1:
    conn, addr = sk.accept()  # 等待接收來自客戶端的信息
    print(addr)
    while 1:
        try:
            data = conn.recv(1024)
        except Exception:
            break
        if not data: break
        print(‘接收到來自客戶端的信息......‘, str(data, ‘utf8‘))
        inp = input(‘》》》》》》》》‘)
        conn.send(bytes(inp, ‘utf8‘))

  使用多線程版

import socketserver


class MyServer(socketserver.BaseRequestHandler):
    # 重寫父類的方法
    def handle(self):
        print(‘waiting.......‘)
        while 1:
            conn = self.request
            print(self.client_address)
            while 1:
                try:
                    data = conn.recv(1024)
                except Exception:
                    break
                if not data:
                    break
                print(‘......‘, str(data, ‘utf8‘))
                inp = input(‘》》》》》》》》‘)
                conn.sendall(bytes(inp, ‘utf8‘))
            conn.close()


if __name__ == ‘__main__‘:
    host = ‘127.0.0.1‘
    ip = ‘8080‘
    server = socketserver.ThreadingTCPServer((host, ip), MyServer)#多線程通話
    # 不會出現在一個客戶端結束後,當前服務器端就會關閉或者報錯,而是繼續運行,與其他的客戶端繼續進行通話。
    server.serve_forever()

  

python socket編程入門級