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

相关文章
|
2天前
|
Java
如何在Java中实现多线程的Socket服务器?
在Java中,多线程Socket服务器能同时处理多个客户端连接以提升并发性能。示例代码展示了如何创建此类服务器:监听指定端口,并为每个新连接启动一个`ClientHandler`线程进行通信处理。使用线程池管理这些线程,提高了效率。`ClientHandler`读取客户端消息并响应,支持简单的文本交互,如发送欢迎信息及处理退出命令。
|
22天前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
|
19天前
|
缓存 弹性计算 数据库
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
2核4G云服务器支持的在线人数取决于多种因素:应用效率、并发数、内存、CPU、带宽、数据库性能、缓存策略、CDN和OSS使用,以及用户行为和系统优化。阿里云的ECS u1实例2核4G配置,适合轻量级应用,实际并发量需结合具体业务测试。
7 0
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
|
22天前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
|
23天前
|
安全 开发者
LabVIEW程序退出后线程仍在运行问题
LabVIEW程序退出后线程仍在运行问题
22 2
|
13天前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
22天前
|
网络协议 Linux
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
|
22天前
|
Java 调度 Windows
Java面试之程序、进程、线程、管程和并发、并行的概念
Java面试之程序、进程、线程、管程和并发、并行的概念
17 0
|
22天前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
22天前
|
安全 NoSQL Java
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R