socket编程
服务端
socket->bind->listen->accept
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char **argv)
{
unsigned short port = 8080;
if (argc > 1) {
port = atoi(argv[1]);
}
// 1.create socket
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock <= 0) {
cerr << "creator socker error" << endl;
return -1;
}
cout << "sock = " << sock << endl;
// bind port
sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);// 主机字节序转换为网络字节序
saddr.sin_addr.s_addr = htonl(0);
if (::bind(sock, (sockaddr *)&saddr, sizeof(saddr)) != 0) {
cerr << "bind port " << port << " failed!"<< endl;
}
cout << "bind port " << port << " success" << endl;
// listen
listen(sock, 10);
// accept
sockaddr_in caddr;// 客户端地址
socklen_t len = 0;
int client_sock = accept(sock, (sockaddr*)&caddr, &len);
cout << "client sock = " << client_sock << endl;
//send
char buffer[1024] = "welcome to xms";
int length = send(client_sock, buffer, strlen(buffer), 0);
cout << "length = " << length << endl;
//recv
length = recv(client_sock, buffer, sizeof(buffer) - 1, 0);
if (length > 0) {
buffer[length] = '\0';
cout << buffer << endl;
}
close(sock);
return 0;
}
客户端
socket->connect
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char **argv)
{
unsigned short port = 8080;
const char *ip = "127.0.0.1";
if (argc > 2) {
ip = argv[1];
port = atoi(argv[2]);
}
// 1.create socket
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock <= 0) {
cerr << "creator socker error" << endl;
return -1;
}
sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);// 主机字节序转换为网络字节序
saddr.sin_addr.s_addr = inet_addr(ip);
int res = connect(sock, (sockaddr *)&saddr, sizeof(saddr));
if (res != 0) {
cerr << "connect " << ip << " : " << port << " failed" << endl;
}
char buffer[1024] = {0};
int len = recv(sock, buffer, sizeof(buffer) - 1, 0);
if (len > 0) {
cout << buffer << endl;
}
strcpy(buffer, "send from client");
len = send(sock, buffer, strlen(buffer), 0);
close(sock);
return 0;
}
作者: mengchao
出处:https://www.cnblogs.com/meng-chao/p/16349694.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!