博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinSock2网络编程的步骤(服务器端)
阅读量:6882 次
发布时间:2019-06-27

本文共 2141 字,大约阅读时间需要 7 分钟。

1、构造函数中对套接字对象和其他控制变量初始化

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_hSocket = NULL; isServerStart=FALSE; ChatEnable=FALSE;

2、调用WSAStartup函数对WinSock DLL初始化

WSADATA wsaData;//结构体,包含加载库版本的相关信息 WORD version = MAKEWORD(2, 0);//版本号 int ret = WSAStartup(version, &wsaData);//返回0表示初始化成功 if(ret != 0)  TRACE("Initilize Error!\n");

3、创建Socket套接字

//AF_INET表示在Internet域进行通信,SOCK_STREAM表示套接字类型(区别于SOCK_DGRAM),0表示TCP/IP协议m_hSocket = socket(AF_INET, SOCK_STREAM,0);  if (m_hSocket==INVALID_SOCKET)  {   AfxMessageBox("Socket Create Error!");   return;  }

4、将本地地址与套接字绑定

m_addr.sin_family = AF_INET;//Internet域m_addr.sin_addr.S_un.S_addr = INADDR_ANY;//任意地址m_addr.sin_port = htons(1029);//端口号int ret = 0;int error = 0;ret = bind(m_hSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));//绑定error = WSAGetLastError();if(ret == SOCKET_ERROR){    list->AddString("服务器:Bind Error!");    return ;}

5、创建监听线程

DWORD dwthread;//unsigned long类型::CreateThread(NULL,0,listenthread,(LPVOID)m_hSocket,0,&dwthread);//listenthread是一个监听该线程的函数,(LPVOID)m_hSocket是套接字的指针

 6、调用监听程序Listen函数

DWORD WINAPI listenthread(LPVOID lpparam)//将数据从一个线程传到另一个线程的唯一方法是在创建线程时传递给新线程一个指针参数LPVOID lpparam{        SOCKET m_socket=(SOCKET)lpparam;//获取传递进来的套接字句柄    int ret;    ret=listen(m_socket,30);    if(ret==SOCKET_ERROR)    {        ListInfo=_T("Listen Error!");        return 0;    }    SOCKET s;    s=accept(m_socket,NULL,NULL);    DWORD dwthread;    ::CreateThread(NULL,0,Recvthread,(LPVOID)s,0,&dwthread);        ::CreateThread(NULL,0,Sendthread,(LPVOID)s,0,&dwthread);    return 0;}

7、消息接收和消息发送循环

//消息接收Recvthreadwhile(1){    ret=recv(m_socket,buff,256,0);    if(ret==SOCKET_ERROR)    {        ListInfo=_T("Socket Receive Error!");        closesocket (m_socket);    }    buff[ret]='\0';    CString str;    str="客户端:";    str=str+buff;    ListInfo=str;}//消息发送Sendthreadwhile(1){    if (ChatInfo.GetLength()>0)    {    ret=send(m_socket,ChatInfo,ChatInfo.GetLength(),0);    if(ret==SOCKET_ERROR)    {        ListInfo=_T("服务器:Data send error!");        return -1;    }    ListInfo=_T("服务器:");    ListInfo+=ChatInfo;    ChatInfo.Empty();    }

 

转载于:https://www.cnblogs.com/Block-head/p/4388260.html

你可能感兴趣的文章
体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
查看>>
Python实践之(七)逻辑回归(Logistic Regression)
查看>>
PAT (Advanced Level) 1107. Social Clusters (30)
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
Bat 脚本实现监控进程功能
查看>>
Js判断是否联网引入不同js
查看>>
pwnable.kr bof之write up
查看>>
Sql语句查询某列A相同值的另一列B最大值的数据
查看>>
技术串讲 CAS 有用
查看>>
怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
查看>>
Tensorflow学习笔记(1):tf.slice()函数使用
查看>>
ORA-01102的解决办法
查看>>
奇怪的iphone6 plus,H5调用拍照浏览器崩溃
查看>>
MVC接受JSON的一些注意事项
查看>>
response对象设置输出缓冲大小
查看>>
MVC+Ninject+三层架构+代码生成 -- 总结(七、顯示層 一)
查看>>
[CF1105D]Kilani and the Game
查看>>
[bzoj4195][Noi2015]程序自动分析
查看>>
简单的bfs(最短路径)c++
查看>>