WinSock2网络编程的步骤(服务器端)

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、消息接收和消息发送循环

//消息接收Recvthread

while(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;
}

//消息发送Sendthread

while(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();
}
时间: 2024-11-10 11:35:26

WinSock2网络编程的步骤(服务器端)的相关文章

WinSock2网络编程的步骤

http://www.songtaste.com/user/9166035/infohttp://www.songtaste.com/user/9166080/infohttp://www.songtaste.com/user/9166136/infohttp://www.songtaste.com/user/9166190/infohttp://www.songtaste.com/user/9166379/infohttp://www.songtaste.com/user/9166410/in

c网络编程(server服务器端,linux)

多进程 1 #include "network.h" 2 3 void do_service(int peerfd) 4 { 5 char recvbuf[1024] = {0}; 6 int ret; 7 while(1) 8 { 9 ret = readline(peerfd, recvbuf, 1024); 10 if(ret == 0) 11 { 12 close(peerfd); 13 exit(EXIT_SUCCESS); 14 } 15 //模拟数据处理过程 16 pri

Java网络编程 - 客户端向服务器端发送文件的简单实现

1.Client package cn.qi.Client; import java.io.*; import java.net.Socket; public class Client { Socket clientSocket; Client() { // 建立连接到服务器端的socket try { clientSocket = new Socket("127.0.0.1", 5000); } catch (IOException e) { e.printStackTrace();

C/C++网络编程7——多进程服务器端之fork函数

通过前面几节的内容,我们已经可以实现基本的C/S结构的程序了,但是当多个客户端同时向服务器端请求服务时,服务器端只能按顺序一个一个的服务,这种情况下,客户端的用户是无法忍受的.所以虚实现并发的服务器端. 并发服务器端的实现方法: 1:多进程服务器端:通过创建多个进程提供服务. 2:多路复用服务器:用过捆绑并统一管理I/O对象提供服务. 3:多线程服务器:通过生成与客户端等量的线程提供服务. 多进程服务器端: 进程:可执行程序的一次执行过程. 在linux下可通过fork()函数创建一个进程. #

网络编程基本步骤

TCP UDP

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

JAVA的网络编程【转】

网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作

VC++网络编程学习笔记

Visual C++网络编程是指用户使用MFC类库(微软基础类库)在VC编译器中,以实现网络应用.用户通过VC编程实现的网络软件可以在网络中不同的计算机之间互传文件,图像等信息.基础知识: 如果用户要进行VC网络编程,则必须首先了解计算机网络通信的基本框架和工作原理.在两台或多台计算机之间进行网络通信时,其通信的双方还必须遵循相同的通信原则好数据格式. 1.OSI七层网络模型OSI网络模型是一个开放式系统互联的参考模型. 发送信息的计算机 接收信息的计算机 7.应用层 7.应用层 表示计算机网络