天天看點

socket樹莓派c語言,socket通信

## Socket

百度百科上對Socket的解釋是:Socket通常稱作“套接字”,用于描述IP位址和端口,是一個通信鍊的句柄,可以用來實作不同虛拟機或不同計算機之間的通信。

## Socket通信

下面圖是socket伺服器與用戶端通信的過程,接下來我們簡單講一下程式設計

socket樹莓派c語言,socket通信

使用socket通信,首先導入socket子產品

```python

import socket

```

### TCP伺服器

1. 伺服器建立套接字,綁定套接字到本地IP與端口

socket(family, type[, protocal])使用給定的套接族,套接字類型,協定編号(預設為0)來建立套接字。

```python

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind()

```

2. 開始監聽連結

s.listen(backlog)

backlog為拒絕連結前,系統可以挂起的最大連接配接數,至少為1。

```python

s.listen(2)

```

3. 進入循環,不斷接收用戶端的連結請求

```python

while True:

s.accept()

```

accept()接受TCP連結并傳回(conn, address),其中conn是新的套接字對象,可以用來接收和發送資料,address是連結用戶端的位址。

4. 接收用戶端傳來的資料,并且給對方發資料

```python

s.recv()

s.sendall()

```

注意:

伺服器與用戶端不能直接發送清單,元素,字典等帶有資料類型的格式,發送的内容必須是字元串資料。

5. 傳輸完畢後,關閉套接字。

```python

s.close()

```

#### 簡單的伺服器端代碼

```python

import socket

HOST, PORT = '', 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((HOST, PORT))

s.listen(5)

print "Server start at:%s:%s" %(HOST, PORT)

print "wait for connection..."

while True:

conn, addr = s.accept()

print "Connected", addr

while True:

data = conn.recv(1024)

print data

conn.send("server received you message.")

conn.close()

s.close()

```

TCP用戶端

1. 建立套接字并連結至遠端位址(伺服器)

```python

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect()

```

用戶端調用connect()方法來建立與伺服器的連結,并開始三次握手。握手保證了用戶端可以正常連接配接到伺服器,反之亦然。

2. 連接配接後發送資料和接收資料

```python

s.sendall()

s.recv()

```

3. 傳輸完畢後關閉套接字

```python

s.close()

```

#### 簡單的用戶端代碼

```python

import socket

HOST, PORT = '192.168.0. 118', 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))

while True:

cmd = raw_input("Input msg:")

s.send(cmd)

data = s.recv(1024)

print data

s.close()

```

參考:https://blog.51cto.com/loufeng/2340821