-----------这是客户端程序--------------

#include "stdio.h"

#include "winsock2.h"

#include "stdlib.h"

#pragma comment(lib,"ws2_32")

void main()

{

WSADATA wsaData;

WSAStartup(MAKEWORD(2,2),&wsaData);

SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

sockaddr_in sockaddr;

sockaddr.sin_family = PF_INET;

sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

sockaddr.sin_port = htons(9000);

connect(s,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));

char buffer[MAXBYTE] = {0};

recv(s,buffer,MAXBYTE,NULL);

printf(" ***SERVER*** %s",buffer);

while(TRUE)

{

char* mymsg = new char[10000];

printf(" OK Now You Can Connect .\n ->");

gets(mymsg);

send(s,mymsg,strlen(mymsg)+sizeof(char),NULL);

}

closesocket(s);

WSACleanup();

getchar();

exit(0);

}

-----这是服务端程序------#include "stdio.h"

#include "winsock2.h"

#include "stdlib.h"

#define MAXCLIENTS 2

#pragma comment(lib,"ws2_32")

/*

多线程

SOCKET

*/

DWORD WINAPI ProcessClientRequest(LPVOID lpParam)

{

SOCKET* clientsocket = (SOCKET*)lpParam;

char* msg = "Hello, Welcome to connect . \r\n";

send(*clientsocket,msg,strlen(msg)+sizeof(char),NULL);

printf("---SYS----    Hello @_@\n");

while(TRUE)

{

char buffer[MAXBYTE] = {0};

recv(*clientsocket,buffer,MAXBYTE,NULL);

if(strcmp(buffer,"exit")==0)

{

char* exit_msg = "Bye \r\n";

send(*clientsocket,exit_msg,strlen(exit_msg)+sizeof(char),NULL);

break;

}

printf("--- Sys: %s--\n",buffer);

}

closesocket(*clientsocket);

return 0;

}

int main()

{

WSADATA wsaData;

WSAStartup(MAKEWORD(2,2),&wsaData);

SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

sockaddr_in sockaddr;

sockaddr.sin_family = PF_INET;

sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

sockaddr.sin_port = htons(9000);

bind(s,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));

listen(s,1);

printf("listening on port[%d].\n",9000);

char* msg = new char[1000];

HANDLE threads[MAXCLIENTS];    //线程存放 数组

int CountClient = 0;

while(TRUE)

{

SOCKADDR clientAddr;

int size = sizeof(SOCKADDR);

SOCKET clientsocket;

clientsocket = accept(s,&clientAddr,&size);        //阻塞模式 直到有新的Tcp 接入

printf("Sys: New client touched ID is %d .\n",CountClient+1);            //

if(CountClient

{

threads[CountClient ++] = CreateThread(NULL,0,&ProcessClientRequest,&clientsocket,0,NULL);

}

else                                                //线程数超了 拒绝服务

{

char *msg = " Error Too many client Connecttion  !.\r\n";

send(clientsocket,msg,strlen(msg)+sizeof(char),NULL);

printf(" ** SYS **  REFUSED !.\n");

closesocket(clientsocket);

}

}

printf("Maximize clients occurred for d%.\r\n", MAXCLIENTS);

WaitForMultipleObjects(MAXCLIENTS,threads,TRUE,INFINITE);

closesocket(s); //关闭socket

for(int i=0;i

{

CloseHandle(threads[i]);

}

WSACleanup();

getchar();

exit(0);

return 0;

}

vs c语言 多线程demo,一个多线程的Socket通信Demo(C语言实现)相关推荐

  1. Android java和C的Socket通信demo(可用)

    原址 关于Android应用与Framework的socket通信,相信关心这个问题的朋友们已经看过<android使用socket使底层和framework通信>这篇文章,美中不足的是作 ...

  2. C++多线程编程以及epoll处理socket通信时多端口问题

    问题根源:当有许多客户端用socket来连接我的服务器(期间存在一定的数据交互)的时候,为了提高性能,我们需要采用多线程编程(处理具体的请求),同时还要使用epoll来高效的在IO事件之间切换(侦查s ...

  3. c语言怎么把一个整数挨挨挤挤,《C语言》课程PPT_第1章_C语言基础

    C语言基础 第一章 传褪猿度历霞司腺娠详躁代升乍圃刷烘诧藩东兹淮驹耿游竿郝芽祖续憨荫 C语言 课程PPT 第1章 C语言基础 C语言 课程PPT 第1章 C语言基础 2 本章目标 命令 程序以及软件之 ...

  4. Apache Mina:一个简单的tcp通信demo

    当前版本:jdk1.8 1. 声明 当前内容主要为本人学习apache mina,主要为记录学习的demo,当前内容主要借鉴官方tcp的demo 基本依赖: <!-- https://mvnre ...

  5. c语言485通讯源程序,51单片机485通信实验C语言源代码实现

    #include #include sbit RS485=P3^7;   //定义485的使能脚 bit SendFlag; unsigned int ReData,SenData; /******* ...

  6. c语言多线程转python多线程,真正的python 多线程!一个修饰符让你的多线程和C语言一样快...

    > Python 多线程因为GIL的存在,导致其速度比单线程还要慢.但是近期我发现了一个相当好用的库,这个库只需要增加一个修饰符就可以使原生的python多线程实现真正意义上的并发.本文将和大家 ...

  7. c语言多线程转python多线程,一个Socket能否被多线程写入(转)

    C语言出身,看dubbo服务时多线程共享一个长连接时,在想为什么不会出现数据写乱的情况(不是粘包的那种),也就是一个socket缓冲区中,先写了A包的一部分,又写了B包的一部分,再写了A包的一部分?? ...

  8. 超详细c语言简化tcp通信接口(多线程实现一个服务端处理多个客户端服务)

    超详细c语言tcp通信接口 1.可下载源码(客户端 || 服务端通信) 2.说明 3.接口代码 4.客户端通信main_client_demo.c 5.服务端通信main_server_demo.c ...

  9. c语言中定时执行线程alarm,用多线程写一个alarm,

    已结贴√ 问题点数:20 回复次数:3 用多线程写一个alarm, #include #include #include #include "errors.h" #define D ...

最新文章

  1. idea添加database插件_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理......
  2. R语言CRAN软件包Meta分析
  3. 开源网站Open-Open
  4. VSCode 设置中文语言
  5. C#中的快捷键,可以更方便的编写代码
  6. Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别
  7. 华为魔术手机拆机图解_【连载二十二】手机维修电路基础卡电路
  8. [codevs 2236] 终极情报网
  9. matlab计算hessian矩阵
  10. 怪哉翻译软件测试,翻译怪哉虫文言文
  11. elasticsearch group by java_java elasticsearch聚合查询实例详解
  12. 网络游戏同步问题综述
  13. Java代码编写规范总结
  14. 修改form表单action路径
  15. Python-OpenCV 读取和保存视频和解决保存失败的原因分析
  16. 回顾2022! 链上NFT精彩项目大盘点
  17. 自动化设备数据采集系统优势
  18. capitalsquiz和capitalsquiz_answer,中国34个省、自治区、直辖市的省会等所在地,随机生成1个文件
  19. 瞳距自测软件app 测试准确吗,瞳孔距离检测手机app-瞳孔距离检测最新版手机软件预约 v1.0-友情手机站...
  20. 【Polya定理】SCU 4423

热门文章

  1. HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面 详细错误:HTTP 错误...
  2. URLEncoder编码
  3. WCF系列(1)—— CustomBehavior 入门
  4. [密码学基础][信息安全][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第11篇]DLP、CDH和DDH问题是什么?
  5. elementui图片上传php,vue+element-ui+富文本————图片上传
  6. 树莓派 无法安装mysql_树莓派安装mysql
  7. java不同环境_Spring Boot系列 – 5. 不同的环境使用不同的配置
  8. 手机全部零件名称图片_【直播课】一条记录中显示多张图片
  9. threejs渲染器剔除模式
  10. Logistic Regression:最基础的神经网络