Python与C++通信,早前博客(【整理】Linux Socket网络编程_TCP编程(4)_C++与PythonSocket通信)有一篇是:C++做服务端,Python做客户端,这一篇正好相反。
方法大同小异,在此提供示例代码以及下载:
Python服务端:
python_server.py:
# -*- coding: utf-8 -*-
import socket
#创建一个socket对象
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
#sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 0)
#sock.setblocking(1)
ip_port = ('127.0.0.1',9998)
#绑定ip和端口号
sock.bind(ip_port)
#sock.setblocking(1)
#设置最大连接数
sock.listen(5)
while True:
#使用accept方法获取一个客户端连接
#获取客户端的scoket对象conn和客户端的地址(ip、端口号)address
conn,address = sock.accept()
# 给客户端发信息
send_data = 'Hello.'
conn.sendall(send_data)
while True:
try:
# 接收客户端消息
recv_data = conn.recv(1024)
#print 'Client:', recv_data, ", Type:", type(recv_data), ", Equal:", (recv_data.replace("0x00", "") == 'start')
#print 'Client:', recv_data[0:5], ", Type:", type(recv_data[0:5])
# 如果收到start就开始调用统计代码
if recv_data[0:5] == 'start':
print 'Ok, Starting...'
# 开始调用统计代码输出结果到变量 result
pass
#检测客户端发出退出指令,关闭连接
if recv_data[0:4] == 'exit':
break
#s = input('Server:').strip()
#if len(s) == 0:
# break
#conn.send(bytes(s,encoding='utf-8'))
except Exception as e:
break
# 关闭客户端的socket连接
conn.close()
运行指令:
python python_server.py
C语言客户端代码:
socket_client.c
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <memory.h>
#include <signal.h>
#include <time.h>
int main() {
/*步骤1:创建socket*/
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
struct sockaddr_in serveraddr;
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(atoi("9998"));
inet_pton(AF_INET, "127.0.0.1", &serveraddr.sin_addr.s_addr);
/*步骤2:客户端调用connect函数连接到服务器*/
if (connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) {
perror("connect error");
exit(1);
}
/*步骤3:调用IO函数(read/write)进行服务端的双向通信*/
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, "start");
size_t size;
/*if ((size = read(sockfd, buffer, sizeof(buffer))) < 0) {
perror("read error");
}*/
printf("buffer is %s, sizeof(buffer) is %d\n", buffer, sizeof(buffer));
if (write(sockfd, buffer, sizeof(buffer)) < 0) {
perror("write error");
}
/*步骤4:关闭socket*/
close(sockfd);
return 0;
}
编译指令:
gcc socket_client.c -o socket_client
运行指令:
./socket_client
演示效果:
文章的脚注信息由WordPress的wp-posturl插件自动生成

微信扫一扫,打赏作者吧~![[整理][转载]win下网卡抓包发包库Npcap使用](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2023/08/demo_1-1024x711.jpg&w=280&h=210&zc=1)
![[转载]基础数据char,int,double,string是线程安全的吗?](http://www.jyguagua.com/wp-content/themes/begin/img/random/11.jpg)
![[整理]how to run flask with pyqt5](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2021/03/pyqt_flask.png&w=280&h=210&zc=1)
![[已解决]LINK : fatal error LNK1158: cannot run 'rc.exe' 错误的解决办法](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2021/02/Snipaste_2021-02-17_15-18-26-1024x505.png&w=280&h=210&zc=1)