开发者社区> 科技小能手> 正文

Tcp多线程服务器和客户端程序

简介:
+关注继续查看

Tcp多线程服务器和客户端程序


//服务器程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define PORT 8082
#define BUFSIZE 512
char buf[BUFSIZE+1];

void* fun(void* x)
{
       //printf("enter thread!\r\n");
       int new_fd=*((int*)x);
   while(1)
       {
       int z=read(new_fd,buf,BUFSIZE);//第 6 步 读取套接字
   if(z==0){printf("client close !");break;};
   buf[z]='\0';
   printf("%s\r\n",buf);//打印
   };
}
int newfd[512];
int inewfd=0;
int main()
{
   //第 1 步 创建套接字
   int sockfd=socket(AF_INET,SOCK_STREAM,0);
   //第 2 步 设置地址结构体
   struct sockaddr_in svraddr;
   svraddr.sin_family=AF_INET;//使用 internet 协议
   svraddr.sin_port=htons(PORT);
   inet_aton("0.0.0.0",&svraddr.sin_addr);
   //第 3 步 绑定
   int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));
       if(ret<0){printf("error bind!\r\n");exit(-1);};
   //第 4 步 监听
   listen(sockfd,128);
   while(1)
   {
   newfd[inewfd++]=accept(sockfd,NULL,NULL); //第 5 步 接收
   pthread_t ntid;
       pthread_create(&ntid,NULL,fun,(void*)&(newfd[inewfd-1])); 
   }
}
// 注意 gcc server.c -o server -lpthread


//客户端程序 cli.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define PORT 8082
#define BUFSIZE 512
char buf[BUFSIZE+1];
int main()
{
   //第 1 步 创建一个体套接字
   int sockfd=socket(AF_INET,SOCK_STREAM,0);
   //第 2 步 设置 addr 结构体
   struct sockaddr_in svraddr;
   svraddr.sin_family=AF_INET;//使用 internet 协议
   svraddr.sin_port=htons(PORT);
   inet_aton("127.0.0.1",&svraddr.sin_addr);
   //第 3 步 连接服务器
   connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));
   while(1)
   {
   scanf("%s",buf);
   write(sockfd,buf,strlen(buf)); //第 4 步 向套接字中写入字符串
   }
}

本文转自陈仲阳0 51CTO博客,原文链接:http://blog.51cto.com/wolfword/1224933

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
git centos yum 安装 (服务器端 ,客户端)
  21.git 服务器端安装 centos yum       21.1安装服务器端 yum install -y git git --version 查看安装   21.
852 0
并发服务器三种实现方式之进程、线程和select
这篇主要介绍如何实现并发服务器,主要通过三种方式:进程、线程和select函数来分别实现。
1459 0
客户端和服务器的通信程序|学习笔记
快速学习客户端和服务器的通信程序
49 0
23705
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载