这个是简单版,只为提供搭建TCP服务器简易模板,代码在linux可直接运行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>
#define MAXSIZE 4096
int main()
{
int Ret = 0; //返回值判断
int Sockfd = 0; //服务器socket套接字
int Clifd = 0; /*
客户端的套接字
当有客户端连接时, accept()的返回值就是客户端的套接字
后面的操作如recv, send操作的套接字皆是用这个与客户端通信
*/
Sockfd = socket(AF_INET, SOCK_STREAM, 0);//创建套接字
if(Sockfd < 0)
{
printf("socket error: %s(errno: %d)\n", strerror(errno), errno);
return -1;
}
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET; //协议族
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //地址, INADDR_ANY为系统宏
servaddr.sin_port = htons(6666); //端口号, 通常大于1024
Ret = bind(Sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)); //绑定
if(Ret < 0)
{
printf("bind socket error: %s(errno: %d)\n", strerror(errno), errno);
return -1;
}
Ret = listen(Sockfd, 10); //监听
if(Ret < 0)
{
printf("listen socket error: %s(errno: %d)\n",strerror(errno), errno);
return -1;
}
clifd = accept(Sockfd, (struct sockaddr*)NULL, NULL); //接收
if(clifd < 0)
{
printf("accept socket error: %s(errno: %d)",strerror(errno), errno);
return -1;
}
char *buff = (char *)malloc(MAXSIZE);
if(buff == NULL)
{
printf("buff malloc error\n");
return -1;
}
memset(buff, 0, MAXSIZE);
int i = 0;
while(1)
{
Ret = recv(Clifd, buff, MAXLINE, 0);
if(Ret > 0)
{
for(i = 0; i < ret; i++)
printf("%02x, ", buff[i]); //16进制打印数据
}
memset(buff, 0, MAXSIZE);
}
free(buff);
close(Clifd);
close(Sockfd);
return 0;
}