TCP基礎server與client


基礎版

1、TCP_server端

import socket
sk = socket.socket()  # 創建了一個socket對象
sk.bind(('127.0.0.1',8080))  # 綁定一台機器的(ip,端口)
# 回環地址 - 指向自己這台機器
sk.listen()    # 建立監聽等待別人連接
conn,addr = sk.accept()       # 阻塞:在這里等待直到接到一個連接
# conn是連接
# addr是對方的地址
print(conn)
print(addr)
conn.send(b'hello')              # 和對方打招呼,發送的格式需為byte
msg = conn.recv(1024)                 # 對方和我說的話
# 有發必有收 收發必相等
print(msg)
conn.close()                      # 掛電話
sk.close()                        # 關機

2、TCP_client端

import socket
sk = socket.socket()  # 買個手機
sk.connect(('127.0.0.1',8080))  # 撥號
ret = sk.recv(1024)
print(ret)
sk.send(b'byebye!')
sk.close()

聊天小工具

1、server端

import socket
sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)  #及時關閉端口,TCP端口復用
sk.bind(('127.0.0.1',9000))
sk.listen()
while True:
    conn,addr = sk.accept()  # 接收連接 三次握手conn
    while True:
        inp = input('>>>')
        if inp == 'q':
            conn.send(inp.encode('utf-8'))
            break
        conn.send(inp.encode('utf-8'))
        msg = conn.recv(1024)
        if msg == b'q':break
        print(msg.decode('utf-8'))
    conn.close()    # 四次揮手
sk.close()

2、client端

import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while True:
    msg = sk.recv(1024)
    print(msg.decode('utf-8'))
    if msg == b'q':break
    inp = input('>>>')
    if inp == 'q':
        sk.send(inp.encode('utf-8'))
        break
    sk.send(inp.encode('utf-8'))
sk.close()

3、端口復用舉例

import socket
tcp1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 在綁定前調用setsockopt讓套接字允許地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 接下來兩個套接字都也可以綁定到同一個端口上
tcp1.bind(('0.0.0.0', 12345))
tcp2.bind(('0.0.0.0', 12345))

 自我練習:

1、客戶端

import socket
ph = socket.socket()
ph.connect(("127.0.0.1",8080))

while 1:
    info = input(">>>>>>>")
    ph.send(bytes(info,encoding="utf-8"))
    res = ph.recv(1024).decode(encoding="utf-8")
    if res == "關閉":
        break
    print(res)
ph.close()

2、服務端

import socket
ph = socket.socket()
ph.bind(("127.0.0.1",8080))
ph.listen()
coon,adr = ph.accept()

while 1:
    res = coon.recv(1024).decode(encoding="utf-8")
    if res == "a":
        coon.send(bytes("關閉", encoding="utf-8"))
        break
    print(res)
    info = input('>>>>>>')
    coon.send(bytes(info,encoding="utf-8"))


coon.close()
ph.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM