1. 程式人生 > >python socket網路程式設計

python socket網路程式設計

Socket是網路程式設計的一個抽象概念。Socket表示“打開了一個網路連結”,而開啟一個Socket需要知道目標計算機的IP地址和埠號,再指定協議型別即可。

大多數連線都是可靠的TCP連線。建立TCP連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。

客戶端要主動發起TCP連線,必須知道伺服器的IP地址和埠號。建立TCP連線後,我們就可以向服務端傳送請求。

TCP連線建立的是雙向通道,雙方都可以同時給對方發資料。但是誰先發誰後發,怎麼協調,要根據具體的協議來決定。例如,HTTP協議規定客戶端必須先發請求給伺服器,伺服器收到後才發資料給客戶端。

客戶端實現:

#!usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Ma Ping

import socket

client = socket.socket()           #宣告socket型別並生成socket連線物件
client.connect(('0.0.0.0',9997))  #連線服務端
while True:
    msg = input('>>>:').strip()
    client.send(msg.encode('utf-8'))   #傳送資料,python3只能傳送bytes型別
    data = client.recv(1024).decode()  #接收資料,接收最大位元組數為1024
    print('client reveive: ',data)    #列印接收到的資料
client.close()

服務端實現:

#!usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Ma Ping

import socket

server = socket.socket()
server.bind(('0.0.0.0',9997))      #繫結要監聽的埠
server.listen()                     #監聽
while True:
    # conn 為客戶端連過來,服務端生成的連線例項,addr為連線地址
    conn, addr = server.accept()  # 等待連線
    while True:                  #建立連線後迴圈接收資料
        data = conn.recv(1024)  # 接收資料
        print('server receive: ', data)
        conn.send(data.upper())  # 傳送資料
server.close()