前言
记录一下刚实现的Linux C/C++服务器,代码分享在下面供大家学习。下面代码实现了服务器接受客户端消息并将消息写入文档,最后返回给客户端我已接收到消息的功能。
客户端代码大家可以参照我的写法自己写一个,或者直接使用telnet测试。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main()
{
int s_server, s_client;
s_server = socket(AF_INET, SOCK_STREAM, 0);
if (s_server == -1)
{
printf("create socket fail!\n");
return -1;
}
printf("create socket success!\n");
//server_info
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(9998);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//bind
if (bind(s_server, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1)
{
printf("bind socket fail!\n");
return -1;
}
printf("bind socket success!\n");
//listen
if (listen(s_server, 10) == -1)
{
printf("listen socket fail\n");
return -1;
}
printf("listen socket success\n");
//client_info
struct sockaddr_in client_addr;
int len = sizeof(client_addr);
char recv_buf[1024] = { 0 };
char send_buf[1024] = { 0 };
//创建test.txt,存放接受的数据
FILE* file;
file = fopen("test.txt","wb+");
while (1)
{
printf("wait accept......\n");
s_client = accept(s_server, (struct sockaddr*)&client_addr, (socklen_t *)&len);
if (s_client == -1) {
printf("error: accept failed !\n") ;
continue;
}
printf("连接已建立!\n");
while (1)
{
printf("等待客户端传输数据中...\n");
int recv_len = recv(s_client, recv_buf, sizeof(recv_buf), 0);
if (recv_len < 0) {
printf("数据接收失败!\n");
break;
}
printf("已收到数据,客户端的数据是:%s\n",recv_buf);
fwrite(recv_buf,recv_len,1,file);
fflush(file);
printf("数据已经写入test.text!\n");
sprintf(send_buf, "%s", "I have recived your message!\n");
printf("给客户端回复消息:%s\n",send_buf);
int sendLen = send(s_client, (char*)send_buf, sizeof(send_buf), 0);
if (sendLen < 0) {
printf("给客户端回复消息失败!\n");
break;
}
printf("客户端已收到我的回复消息!\n");
}
}
return 0;
}