WinSocket聊天程序实例(多线程)
#pragma comment(lib,"Ws2_32.lib")
#include <stdio.h>
#include <Winsock2.h>
SOCKET sockSrv;//连接所用套节字
SOCKET sockConn; //监听套接字
SOCKADDR_IN addrSrv;
DWORD WINAPI funA(LPVOID lp);
//定义发送和接收的缓存数组
char sendBuf[];
char recvBuf[]; void main(){
//要求使用的版本
WORD wVersionRequested;
//
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(,);
//初始化WinSock dll库 WSAStartup 函数返回0表示初始化成功
err = WSAStartup(wVersionRequested,&wsaData);
//测试版本获取结果
//printf("%d\n",err);
if(err!=){
printf("WinSock初始化失败\n");
return; } if(LOBYTE(wsaData.wVersion)!=||HIBYTE(wsaData.wVersion)!=){
WSACleanup();
return;
}
printf("服务器已启动......\n"); //创建Socket套接字
sockSrv = socket(AF_INET,SOCK_STREAM,);
//通讯的IP地址 htonl把主机字节转换成网络字节
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//使用IP地址族
addrSrv.sin_family=AF_INET;
//通讯的端口号
addrSrv.sin_port=htons();
//函数绑定 将套接字与通讯地址建立联系
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//建立监听队列(把套接字转换成监听模式)
listen(sockSrv,);
int len=sizeof(SOCKADDR); //accept接受客户请求
sockConn = accept(sockSrv,(SOCKADDR*)&addrSrv,&len); sprintf(sendBuf,"服务器IP: %s ;连接成功!",inet_ntoa(addrSrv.sin_addr));
//发送消息
send(sockConn,sendBuf,strlen(sendBuf)+,); HANDLE a;
DWORD dwT; //参数1:使用默认的安全性;参数2:与调用线程一样的栈大小;
//参数3:线程入口函数地址;参数4:传递给线程的参数;参数5:线程创建标记;参数6:新线程的ID
a=CreateThread(NULL,,funA,,,&dwT);
CloseHandle(a); //消息循环接收和发送
while(){
//从控制台接收用户输入
//printf("服务器说:");
scanf("%s",sendBuf);
//发送消息到客户端
send(sockConn,sendBuf,strlen(sendBuf)+,);
}
closesocket(sockConn);
//关闭连接和套接字
WSACleanup();
} DWORD WINAPI funA(LPVOID lp)
{
while(){
//从服务器接收数据显示到控制台
if(recv(sockConn,recvBuf,,) != -){
printf("客户端说:%s\n",recvBuf);
}else{
printf("连接已经中断.....请检查客户端是否连接并重试。");
system("pause");
exit();
}
}
return ;
}
WinSocket聊天程序实例(多线程)的更多相关文章
- Node聊天程序实例01
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. 本实例要实现 ...
- Node聊天程序实例04:chat_ui.js
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. 这个程序在客 ...
- Node聊天程序实例03:chat.js
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. chat.j ...
- Node聊天程序实例06:server.js
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. server ...
- Node聊天程序实例05:index.html和style.css
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. index. ...
- Node聊天程序实例02:chat_server.js
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. chat_s ...
- boost asio异步读写网络聊天程序client 实例具体解释
boost官方文档中聊天程序实例解说 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- boost asio异步读写网络聊天程序客户端 实例详解
boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
随机推荐
- JavaScript的基本语法(一)
一.常用的表单元素有: 文本框(text). 密码框(password). 多行文本框(<textarea>) 单选按钮(radio). 复选框(checkbox). 列表框(<se ...
- DNN结构演进History—CNN( 优化,LeNet, AlexNet )
本文相对于摘抄的文章已经有大量的修改,如有阅读不适,请移步原文. 以下摘抄转自于维基:基于深度学习的图像识别进展百度的若干实践 从没有感知域(receptive field) 的深度神经网络,到固定感 ...
- C# 检测dll的新版本号方法
FileVersionInfo info = FileVersionInfo.GetVersionInfo(YourFileNameHere);string version = info.FileMa ...
- 怎样在PDF文件中查找某个特定的词?
不得不说中国的修饰词太多了例如:“滚”可以这样说,请你以一种圆润的方式离开:上次小编在路上听到某男子打电话,好像是给女孩子,那口才,是真的牛,夸人不带重复的.要不是我男孩子,我都想以身相许了.人们常常 ...
- MySql数据库多表操作
一.连接查询[连表查询.多表查询] 当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回 mysql支持三种类型的连接查询,分别为: 内连接查询(inner join) ...
- gitlab变更邮箱后发送邮件报SSLError错误
测试发送邮件: gitlab-rails console Notify.test_email('test666@example.com', 'Message Subject', 'Message Bo ...
- Lua的函数的定义、math数学函数、lua字符串的处理、lua支持的字符串类、模式串中的特殊字符_学习笔记04
Lua的函数的定义.math数学函数 定义函数 function [function name] (param1,param2) [function code] --定义一个函数用来求的两个数字的和 ...
- Es6获取数据
$(function(){ $.ajax({ //请求方式 type:"GET", //文件位置 url:"js/data.json", //返回数据格式为js ...
- javascript 数组 常用方法
前言 学学忘忘 闲来做个笔记 整理下数组常用方法. Array 数组常用方法 创建数组的基本方式有两种 1.第一种是使用Array构造函数, var arr = new Array(); ...
- PHP AES cbc模式 pkcs7 128加密解密
今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密.这里简单写一个demo class Model_Junjingbao extends Model { private static ...