1 Star 3 Fork 2

wenjieshi/Linux-Network-Programming

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
first-server.c 1.88 KB
一键复制 编辑 原始数据 按行查看 历史
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
/*
* 这个头文件用于网络字节序的转换
* htonl ==> host to network long
* htons ==> host to network short
* ntohl ==> network to host long
* ntohs ==> network to host shorts
*/
int main()
{
int server = 0;
struct sockaddr_in saddr = {0}; // 对应到头文件netinet/in.h中,这个结构体中的in是什么意思?
int client = 0;
struct sockaddr_in caddr = {0};
socklen_t asize = 0;
int len = 0;
char buf[64] = {0};
int r = 0;
server = socket(PF_INET, SOCK_STREAM, 0);
if (server == -1) {
printf("server socket error\n");
return -1;
}
saddr.sin_family = AF_INET;
// 服务器每一个网卡对应一个IP地址,INADDR_ANY表示监听所有的网卡
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
saddr.sin_port = htons(8899);
if (bind(server, (struct sockaddr *)&saddr, sizeof(saddr)) == -1) {
printf("server bind error\n");
return -1;
}
if (listen(server, 1) == -1) {
printf("server listen error\n");
return -1;
}
printf("server start success\n");
asize = sizeof(caddr);
client = accept(server, (struct sockaddr *)&caddr, &asize);
if (client == -1) {
printf("client accept error\n");
return -1;
}
printf("client: %d\n", client);
len = 0;
do {
int i = 0;
r = recv(client, buf, sizeof(buf), 0);
if( r > 0 ) {
len += r;
}
for(i = 0; i < r; i++) {
printf("%c", buf[i]);
}
} while ( len < 64 );
printf("\n");
send(client, "Hello world!", 12, 0);
sleep(1); // 保证上述的字符串可以发送到网络上
close(client);
close(server);
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/wenjieshi/linux-network-programming.git
git@gitee.com:wenjieshi/linux-network-programming.git
wenjieshi
linux-network-programming
Linux-Network-Programming
master

搜索帮助