1. 程式人生 > >淺談自己理解的socket(1)

淺談自己理解的socket(1)

一、socket是什麼?

Socket是程序通訊的一種方式,即呼叫這個網路庫的一些API函式實現分佈在不同主機的相關程序之間的資料交換。

因此可以socket這種方式實現程序間的通訊。

二、客戶端服務端模式

1、在TCP/IP網路應用中,通訊的兩個程序間相互作用的主要模式是客戶/伺服器(Client/Server,C/S)模式,即客戶向伺服器發出服務請求,伺服器接收到請求後,提供相應的服務。

2、兩個程序間的通訊完全是非同步的,相互通訊的程序間既不存在父子關係,又不共享記憶體緩衝區,因此需要一種機制為希望通訊的程序間建立聯絡,為二者的資料交換提供同步,這就是基於客戶/伺服器模式的TCP/IP。

3、以下具體來看一下TCP/IP模型


三、利用python現實的一個簡單的TCP/IP模型

1、伺服器端程式碼

#TCP/IP的伺服器端
import socket
import os

#IP and port
server_address = ('localhost', 6666)

#create a socket
server_socket = socket.socket()

#bind to the address and listen the connection
server_socket.bind(server_address)
server_socket.listen(5)

while True:
    conn, addr = server_socket.accept()
    print('a new connection from', addr)
    data = conn.recv(1024)
    print('the length of received message is',len(data), 'bytes')
    #change all letters to uppercase
    conn.send(data.upper())
server_socket.close()

2、客戶端程式碼
#TCP/IP的客戶端
import socket

conn_address = ('localhost', 6666)

#create a socket
client_socket = socket.socket()

#connect to the server_socket
client_socket.connect(conn_address)
client_socket.send(b'I will become stronger and stronger')
data = client_socket.recv(1024)
print(data)

3、以上程式碼只是簡單的TCP/IP模型,並沒有實現多個客戶端接入時的併發處理,只實現了一個客戶端的接入請求。下一篇部落格將對上述伺服器端和客戶端進行改進,可以實現客戶端多次的連結,但是並沒有利用多執行緒和多程序。