循环等待键盘输入, 之后发送给服务器
时间: 2023-07-11 19:39:51 浏览: 45
好的,以下是一个循环等待键盘输入并发送给服务器的TCP客户端Python脚本:
```python
import socket
# 定义服务器地址和端口号
SERVER_ADDRESS = 'localhost'
SERVER_PORT = 8888
# 创建TCP客户端socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect((SERVER_ADDRESS, SERVER_PORT))
# 循环等待键盘输入并发送给服务器
while True:
# 等待键盘输入
message = input("请输消息:")
# 发送消息给服务器
client_socket.send(message.encode('utf-8'))
# 如果输入的是exit,则跳出循环
if message == 'exit':
break
# 关闭客户端socket
client_socket.close()
```
该脚本使用了Python标准库中的socket模块,创建了一个TCP客户端socket对象,并连接到指定的服务器地址和端口号。然后,使用一个while循环来不断等待键盘输入,并将输入的消息发送给服务器。在每次发送消息后,判断输入的消息是否是'exit',如果是,则跳出循环。最后,关闭客户端socket。
相关问题
嵌入式网络编程建立连接→客户端从键盘接收用户输入→发送到服务器端→服务器从键盘 接收用户输入→发送到客户端(循环上述过程,直到用户在某端输入了 quit)→ 关闭连接,退出程序。
这个过程可以分为以下几个步骤:
1. 客户端建立连接:使用套接字函数 `socket()` 创建一个套接字对象,使用 `connect()` 函数连接到服务器端。
2. 客户端从键盘接收用户输入:使用 `fgets()` 函数从标准输入流 `stdin` 中读取用户输入的内容。
3. 客户端将用户输入发送到服务器端:使用 `send()` 函数将用户输入的内容发送到服务器端。
4. 服务器端从客户端接收用户输入:使用 `recv()` 函数从已连接的套接字中接收客户端发送的数据。
5. 服务器端从键盘接收用户输入:使用 `fgets()` 函数从标准输入流 `stdin` 中读取用户输入的内容。
6. 服务器端将用户输入发送到客户端:使用 `send()` 函数将用户输入的内容发送到客户端。
7. 循环上述过程,直到用户在某端输入了 quit:使用`strcmp()`函数判断用户输入是否为 "quit",如果是则跳出循环。
8. 关闭连接,退出程序:使用 `close()` 函数关闭套接字连接,结束程序。
以下是示例代码,供参考:
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int client_socket;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
// 创建套接字
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 初始化服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接服务器
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("connection failed");
exit(EXIT_FAILURE);
}
while (1) {
// 从键盘接收用户输入
printf("Enter message: ");
fgets(buffer, BUFFER_SIZE, stdin);
// 发送数据到服务器端
send(client_socket, buffer, strlen(buffer), 0);
// 接收服务器端发送的数据
memset(buffer, 0, BUFFER_SIZE);
recv(client_socket, buffer, BUFFER_SIZE, 0);
printf("Server: %s", buffer);
// 判断用户输入是否为 "quit"
if (strcmp(buffer, "quit\n") == 0 || strcmp(buffer, "quit\r\n") == 0) {
break;
}
}
// 关闭套接字连接
close(client_socket);
return 0;
}
```
服务器端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
char buffer[BUFFER_SIZE];
// 创建套接字
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 初始化服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
// 绑定套接字到 IP 地址和端口号
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 开始监听连接请求
if (listen(server_socket, 3) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 等待客户端连接
printf("Waiting for client connection...\n");
socklen_t client_addr_len = sizeof(client_addr);
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_socket < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
while (1) {
// 接收客户端发送的数据
memset(buffer, 0, BUFFER_SIZE);
recv(client_socket, buffer, BUFFER_SIZE, 0);
printf("Client: %s", buffer);
// 从键盘接收用户输入
printf("Enter message: ");
fgets(buffer, BUFFER_SIZE, stdin);
// 发送数据到客户端
send(client_socket, buffer, strlen(buffer), 0);
// 判断用户输入是否为 "quit"
if (strcmp(buffer, "quit\n") == 0 || strcmp(buffer, "quit\r\n") == 0) {
break;
}
}
// 关闭套接字连接
close(server_socket);
close(client_socket);
return 0;
}
```
用python设计一个信息系统,系统必须通过客户端录入账号口令远程登录; 2、 登录后客户端可通过键盘输入向服务器发送数据; 3、 服务器端设置嗅探关键字,如果客户端发送的数据包含该关键字,即将该数据显示出来。
以下是一个简单的实现:
服务器端代码:
```python
import socket
# 设置监听地址和端口号
HOST = '127.0.0.1'
PORT = 8888
# 设置嗅探关键字
KEYWORD = 'password'
# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定监听地址和端口号
server_socket.bind((HOST, PORT))
# 开始监听
server_socket.listen(1)
# 等待客户端连接
print('Waiting for client connection...')
client_socket, client_address = server_socket.accept()
print('Client connected:', client_address)
# 接收客户端发送的账号口令
account = client_socket.recv(1024).decode()
password = client_socket.recv(1024).decode()
# 验证账号口令
if account == 'admin' and password == '123456':
print('Login successful!')
# 向客户端发送欢迎消息
client_socket.sendall('Welcome to the server!'.encode())
while True:
# 接收客户端发送的数据
data = client_socket.recv(1024).decode()
if not data:
break
# 判断数据是否包含关键字
if KEYWORD in data:
# 如果包含关键字,将数据显示出来
print('Received data:', data)
# 向客户端发送回复消息
client_socket.sendall(('Received data: ' + data).encode())
else:
print('Login failed!')
# 关闭套接字
client_socket.close()
server_socket.close()
```
客户端代码:
```python
import socket
# 设置服务器地址和端口号
HOST = '127.0.0.1'
PORT = 8888
# 创建套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect((HOST, PORT))
# 输入账号口令
account = input('Please enter your account: ')
password = input('Please enter your password: ')
# 发送账号口令给服务器
client_socket.sendall(account.encode())
client_socket.sendall(password.encode())
# 接收服务器发送的欢迎消息
data = client_socket.recv(1024).decode()
print(data)
# 循环发送数据给服务器
while True:
message = input('Please enter your message: ')
# 发送数据给服务器
client_socket.sendall(message.encode())
# 接收服务器发送的回复消息
data = client_socket.recv(1024).decode()
print(data)
# 关闭套接字
client_socket.close()
```
注意事项:
1. 为了简化代码,上述示例中没有添加异常处理,实际应用中需要添加适当的异常处理代码。
2. 为了简化输入,上述示例中账号口令直接通过键盘输入,实际应用中需要使用安全的方式输入账号口令,如使用密码输入框等。
3. 上述示例中嗅探关键字为固定值,实际应用中需要根据具体需求设置相应的关键字。