设为首页 加入收藏

TOP

Linux下IP v6 tcp服务器端源码示例(一)
2014-11-24 03:29:26 来源: 作者: 【 】 浏览:2
Tags:Linux tcp 服务器 源码 示例

/******************************
*
* server.c
*
******************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include


#define MAXBUF 1024
#define LISNUM 10
#define DEFULT_PORT 8787

void *connect_to_client(void *data);
struct sockaddr_in6 serv_addr,client_addr;
/**************************/
int main(int argc,char *argv[])
{
int sockfd,new_fd;
unsigned int serv_port;
unsigned int lisnum;
char buf[MAXBUF+1];

printf( "the command is %s [port] [listen_num]\n", argv[0] );

// 监听起始端口
if ( argv[1] != NULL )
{
serv_port = atoi( argv[1] );
}
else
{
serv_port = DEFULT_PORT;
}


// 监听端口个数
if ( argv[2] != NULL )
{
lisnum = atoi(argv[2]);
}
else
{
lisnum = LISNUM;
}

// 创建socket
if ( (sockfd = socket(PF_INET6,SOCK_STREAM,0)) < 0 )
{
perror("creat socket");
exit(1);
}

// 配置服务器地址与端口
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin6_family = AF_INET6;
serv_addr.sin6_port = htons(serv_port);
serv_addr.sin6_addr = in6addr_any;
// 地址绑定操作
if ( bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr) ) <0 )
{
perror("bind");
exit(1);
}

// 服务器监听
if ( listen(sockfd, lisnum) < 0 )
{
perror("listen");
exit(1);
}

while(1)
{
int len = sizeof(struct sockaddr_in6);
if ( (new_fd = accept(sockfd, (struct sockaddr *)&client_addr, &len)) < 0 )
{
perror("accept");
exit(errno);
}
printf("receive the request form %s\n", inet_ntop(AF_INET6, &client_addr, buf, sizeof(buf)));

// 接收到1个TCP连接则创建1个线程用于数据通讯
pthread_t child_thread;
if ( pthread_create( &child_thread, NULL, connect_to_client, (void *)new_fd) < 0)
{
perror("create thread");
continue;
}
}
close( sockfd );

return(0);
}


/************************************
*
* 子程序:用于处理一个与客户端的连接,由一个线程来执行
*
************************************/
void *connect_to_client(void *data)
{
int i;
int client_fd=(int)data;
char recv_buf[MAXBUF+1];
char send_buf[MAXBUF+1];
char buf[MAXBUF+1];
while(1)
{
sprintf( send_buf, ">>" );
if ( send(client_fd, send_buf, strlen(send_buf), 0) < 0 )
{
perror("send");
continue;
}

// 从客户端接收数据,直到接收到换行符
while ( i < MAXBUF-1 )
{
if ( recv(client_fd, &recv_buf[i], 1, 0) < 0 )
{
perror("recv");
break;
}

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux TCP 文件传输模块 下一篇Linux下IP v6 tcp客户端源码示例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)