TCP最简单的服务程序
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXSOCKETLEN 1024
static void err_doit(int errnoflag, const char *fmt, va_list ap)
{
char buf[1024];
vsprintf(buf, fmt, ap);
if (errnoflag)
{
if (errno >= 0 && errno <= sys_nerr)
{
sprintf(buf+strlen(buf), ": %s", strerror(errno));
}
}
strcat(buf, "\n");
fflush(stdout);
fputs(buf, stderr);
fflush(stderr);
}
void err_print(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
exit(1);
}
int main()
{
int sockfd = 0;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
err_print("socket fd created failed");
}
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(43521);
if (bind(sockfd, (struct sockaddr *)(&servaddr), sizeof(servaddr)) < 0)
{
err_print("bind failed");
}
if (listen(sockfd, MAXSOCKETLEN) < 0)
{
err_print("listen failed");
}
while (1)
{
char buff[1024];
memset(buff, 0,sizeof(buff));
int connfd = -1;
connfd = accept(sockfd, (struct sockaddr *)NULL, NULL);
if (connfd < 0)
{
err_print("accept failed");
}
time_t ticks = time(NULL);
snprintf(buff, sizeof(buff), "%.24s", ctime(&ticks));
size_t size = send(connfd, buff, strlen(buff), 0);
printf("send size:%d, message:%s\n", (int)size, buff);
if (size < 0)
{
err_print("write failed");
}
close(connfd);
};
return 0;
}
最新文章
- Nodejs之MEAN栈开发(五)---- Angular入门与页面改造
- postfix启动失败
- Flink - RocksDBStateBackend
- ado.net C#如何实现数据库增删改查
- loadrunner负载测试实例
- 启动weblogic的错误:Could not obtain an exclusive lock to the embedded LDAP data files directory
- 17.C#类型判断和重载决策(九章9.4)
- HDU5438--Ponds (拓排+BFS)
- 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while
- 06day2
- POJ1182食物链 (并查集)
- GridView 设置背景透明以及Item的点击动画
- 查看Android系统当前运行的activity
- HDU 5773 The All-purpose Zero(树状数组)
- Treap详解
- svn服务器配置与客户端的使用
- 如何在Java应用中提交Spark任务?
- 【我们一起写框架】MVVM的WPF框架(三)—数据控件
- [转] Form 表单数据处理 简单教程 formidable 使用心得
- 688. Knight Probability in Chessboard棋子留在棋盘上的概率