socket树莓派c语言,socket通信

## Socket

百度百科上对Socket的解释是:Socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

## Socket通信

下面图是socket服务器与客户端通信的过程,接下来我们简单讲一下编程

screenshot_1560395848760.png

使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP Socket通信是一种常见的网络通信方式,可以在C语言中使用socket库来实现。下面是一个简单的TCP Socket通信C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #define MAX_BUFFER_SIZE 1024 int main() { int serverSocket, clientSocket; struct sockaddr_in serverAddr, clientAddr; socklen_t addrLen = sizeof(struct sockaddr_in); char buffer[MAX_BUFFER_SIZE]; // 创建服务器端Socket serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket == -1) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 设置服务器地址和端口 serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(8080); // 绑定服务器Socket到指定地址和端口 if (bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == -1) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听连接请求 if (listen(serverSocket, 5) == -1) { perror("listen failed"); exit(EXIT_FAILURE); } printf("Server listening on port 8080...\n"); // 接受客户端连接请求 clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddr, &addrLen); if (clientSocket == -1) { perror("accept failed"); exit(EXIT_FAILURE); } printf("Client connected: %s:%d\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port)); // 接收和发送数据 while (1) { // 接收客户端发送的数据 memset(buffer, 0, sizeof(buffer)); if (recv(clientSocket, buffer, sizeof(buffer), 0) == -1) { perror("recv failed"); exit(EXIT_FAILURE); } printf("Received from client: %s\n", buffer); // 发送响应数据给客户端 if (send(clientSocket, buffer, strlen(buffer), 0) == -1) { perror("send failed"); exit(EXIT_FAILURE); } } // 关闭连接 close(clientSocket); close(serverSocket); return 0; } ``` 这段代码实现了一个简单的TCP服务器,它会监听8080端口,并接受客户端的连接请求。一旦连接建立,服务器会接收客户端发送的数据,并将接收到的数据原样发送回客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值