Linux socket编程
陆续开始复习一下网络知识,把以前的东西全部捡回去
服务端:
/*
* File: main.cpp
* Author: ziqiao
*
* Created on 2011年4月15日, 上午11:06
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333 /* Server listeing prot */
#define BACKLOG 10 /* maximum servering size */
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int sock_fd; // listening socket
int client_fd; // client socket
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
size_t sin_size;
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
perror("socket creatation error");
exit(1);
}
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(SERVPORT);
my_addr.sin_addr.s_addr = htons(INADDR_ANY);
if (bind(sock_fd, (struct sockaddr *)&my_addr, sizeof (my_addr)) == -1) { // 监听端口
perror("bind error");
cout << errno << endl;
exit(1);
}
if (listen(sock_fd, BACKLOG) == -1) { // 监听
perror("listen error");
exit(1);
}
while (1) {
sin_size = sizeof(struct sockaddr_in);
if ((client_fd = accept(sock_fd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) {
perror("accept error");
continue;
}
cout << "received a connection from " << inet_ntoa(remote_addr.sin_addr) << endl;
if (!fork()) { // create subprocess to handle
if (send(client_fd, "Hello, you are connectedn", 26, 0) == -1)
perror("send error");
close(client_fd);
exit(0);
}
}
close(sock_fd);
return 0;
}
客户端:
/*
* File: main.cpp
* Author: ziqiao
*
* Created on 2011年4月15日, 下午5:02
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333 /* Server listeing prot */
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int sock_fd; // socket
struct sockaddr_in remote_addr;
int len;
char buf[1024];
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
perror("socket creatation error");
exit(1);
}
bzero(&remote_addr, sizeof(remote_addr));
remote_addr.sin_family = AF_INET;
remote_addr.sin_port = htons(SERVPORT);
remote_addr.sin_addr.s_addr = htons(0xFF000000);
if ((connect(sock_fd, (struct sockaddr*)&remote_addr, sizeof(remote_addr))) == -1) {
perror("connect error");
exit(1);
}
if ((len = recv(sock_fd, buf, 1024, 0)) == -1) {
perror("recv error");
exit(1);
}
buf [len] = 0;
cout << "Received: " << buf << endl;
close(sock_fd);
return 0;
}

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述