1. 程式人生 > >實現簡單的TCP互動

實現簡單的TCP互動

用python實現TCP的互動

簡單的思路,由服務端和客戶端組成,都要匯入socket,threading(這裡執行緒的主要作用是實現多個使用者同時訪問,可以讓每個使用者佔一個子執行緒,如若不適用執行緒,在多個使用者進行訪問的時候,主執行緒陷入迴圈之中,無法為更多的使用者提供服務。)
TCP實現原理

  1. 步驟一
    建立服務端,不多說,直接上程式碼!`
# -*- conding:utf-8 -*-
'''
Created on 2018年9月14日
@author: zkx
'''
import socket
import threading
#socket又俗稱套接字
s =socket.socket(socket.AF_INET,socket.SOCK_STREAM,0
) #socket.AF_INET 表示IPV4(預設)socket.SOCK_STREAM 流式socket for TCP(預設) address ='127.0.0.1',105 s.bind(address)#自己設定的ip和埠號 預設的AF_INET下這樣以元組的形式存在即(ip,port) 和客戶端相同 s.listen(5)#開始監聽傳入連線。指定在拒絕連線之前,可以掛起的最大連線數量 ,這個值不能無限大,因為需要在核心中維護連線佇列 con,address =s.accept()#接收連線並返回(conn,address),其中conn是新的套接字物件,可以用來接收和傳送資料,address是連線客戶端的地址。
print('%s have connection'%address[0])#顯示客戶端id連線 con.send('Hello ,I am python'.encode())#將資料傳送到連線的ip isok=True def receive(con): global isok while isok: rece_data =str(con.recv(1024),encoding="utf_8")#接收套接字的資料,資料以字串形式返回,1024指定最多可以接收的數量 ,設定編碼集格式,防止編碼發生錯誤 if rece_data =='exit': #當輸入exit的時候,退出迴圈
isok=False print(rece_data) thrd =threading.Thread(target=receive,args=(con,))#例項化子執行緒,執行緒作用目標為receive方法,引數是con thrd.start()#執行緒開啟 #主執行緒 while isok: #將string中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有的資料,成功返回None,失敗則丟擲異常 send_d =input("server>")#用於區別客戶端和服務端 con.sendall(bytes(send_d,encoding='utf_8'))#以位元組的形式將全部資料傳送給客戶端,規定編碼集 if send_d == 'exit': #當輸入exit的時候,退出迴圈 isok =False s.close() #關閉套接字

2 步驟二 建立服務端

# -*- conding:utf-8 -*-
'''
Created on 2018年9月14日
@author: zkx
'''
import socket
import threading

cl =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#socket.AF_INET  表示IPV4(預設)socket.SOCK_STREAM  流式socket for TCP(預設)
address='127.0.0.1',105
cl.connect(address)#連線到address處的套接字,一般,address的格式為元組(hostname,port),和服務端的相同

isok=True
def receive (cl):
    global isok
    while isok:
        t =cl.recv(1024).decode('utf_8')#接收套接字的資料,資料以string形式返回,1024指定最多可以接收的數量
        if t == 'exit':#輸入exit,退出迴圈
            isok = False
        print(t) 
th2=threading.Thread(target=receive,args=(cl,))#例項化子執行緒,執行緒作用目標為receive方法,引數是cl
th2.start() #開啟子執行緒
#主執行緒
while isok:
    t =input()
    cl.send(t.encode(encoding='utf_8'))#向服務端傳送資料,規定編碼集
    if t =='exit':#輸入exit,退出迴圈
        isok =False
cl.close()#關閉套接字

3 結果演示
這裡寫圖片描述