编写一个socket 程序
时间: 2023-10-10 20:05:55 浏览: 38
好的,下面是一个简单的 Python Socket 程序,用于连接到指定的 IP 地址和端口号,发送数据并接收响应:
```python
import socket
# 定义要连接的 IP 地址和端口号
HOST = '127.0.0.1'
PORT = 8080
# 创建一个 Socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到指定的 IP 地址和端口号
s.connect((HOST, PORT))
# 发送数据
data = b'Hello, world!'
s.sendall(data)
# 接收响应
response = s.recv(1024)
# 输出响应的内容
print(response.decode('utf-8'))
# 关闭连接
s.close()
```
以上程序会连接到 `127.0.0.1` 上的 `8080` 端口,发送一个字符串数据 `"Hello, world!"`,并等待接收响应数据,最后关闭连接。你可以根据需要修改程序中的 IP 地址和端口号,以及发送和接收的数据内容和格式。
相关问题
用c语言编写一个socket通信程序
好的,下面是一个简单的用C语言编写的socket通信程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8080
int main(int argc, char const *argv[]) {
int sock = 0, valread;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[1024] = {0};
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("\n Socket creation error \n");
return -1;
}
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// Convert IPv4 and IPv6 addresses from text to binary form
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
printf("\nInvalid address/ Address not supported \n");
return -1;
}
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
printf("\nConnection Failed \n");
return -1;
}
send(sock, hello, strlen(hello), 0);
printf("Hello message sent\n");
valread = read(sock, buffer, 1024);
printf("%s\n", buffer);
return 0;
}
```
这个程序是一个简单的客户端程序,它会连接到一个服务器并向服务器发送一条消息,在接收到服务器的响应后打印出来。
在Linux系统下编写一个socket程序。要求服务端等待客户端的连接请求,一旦有客户端连接,服务端打印出客户端的IP地址和端口,并且向客户端发送欢迎信息和时间。
以下是一个简单的C语言程序,实现了在Linux系统下编写一个socket程序,要求服务端等待客户端的连接请求,一旦有客户端连接,服务端打印出客户端的IP地址和端口,并且向客户端发送欢迎信息和时间。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#define PORT 8888 // 服务端监听的端口号
#define MAXLINE 1024 // 缓冲区大小
int main() {
int sockfd; // 套接字描述符
struct sockaddr_in servaddr, cliaddr; // 服务端和客户端地址结构体
char buff[MAXLINE]; // 缓冲区
time_t ticks; // 时间戳
// 创建套接字
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket error");
exit(1);
}
// 初始化服务端地址结构体
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
// 绑定套接字到指定端口
if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
perror("bind error");
exit(1);
}
// 开始监听客户端连接请求
if (listen(sockfd, 5) == -1) {
perror("listen error");
exit(1);
}
printf("server is listening on port %d...\n", PORT);
while (1) {
socklen_t len = sizeof(cliaddr);
int connfd; // 已连接套接字描述符
// 接收客户端连接请求
if ((connfd = accept(sockfd, (struct sockaddr *)&cliaddr, &len)) == -1) {
perror("accept error");
continue;
}
printf("connection from %s, port %d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
// 获取当前时间戳
ticks = time(NULL);
// 构造欢迎信息
snprintf(buff, sizeof(buff), "welcome to my server, the time is %.24s\r\n", ctime(&ticks));
// 向客户端发送欢迎信息和时间
if (write(connfd, buff, strlen(buff)) == -1) {
perror("write error");
continue;
}
// 关闭连接
close(connfd);
}
return 0;
}
```
在终端中编译并运行这个程序,可以看到服务端正在监听8888端口,等待客户端的连接请求。当有客户端连接时,服务端会打印出客户端的IP地址和端口,并向客户端发送欢迎信息和时间。