文档章节

SOCKET Server实例

种地瓜
 种地瓜
发布于 2016/05/13 17:02
字数 240
阅读 30
收藏 0

// PigServer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include "process.h"
#include <Windows.h>
#include <WinSock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

 

//接受数据
void receive(PVOID param)
{
    SOCKET sock = *((SOCKET*)param);
    char buf[2048] = { 0 };

    int bytes;
    while (1)
    {
        if (SOCKET_ERROR == (bytes = recv(sock, buf, sizeof(buf), 0)))        //rev
        {
            _endthread();
            return;
        }

    }
}

//接受的线程
void ReceiveConnectThread(void *param)
{
    SOCKET socketServer = *((SOCKET*)param);
    while (1)//不断接受来自Client的数据
    {
        SOCKET clientSocket;    //Receive the client
        sockaddr_in clientAddress;
        memset(&clientAddress, 0, sizeof(clientAddress));
        int addrLen = sizeof(clientAddress);

        if (INVALID_SOCKET == (clientSocket = accept(socketServer, (sockaddr*)&clientAddress, &addrLen)))
        {
            cout << "Receive The Client Failure!" << endl;
            return ;
        }
        _beginthread(receive, 0, &clientSocket);
    }
}

//开始服务
SOCKET StartServer()
{
    SOCKET serverSocket;//Inintiate
    //Create Failure
    if (INVALID_SOCKET == (serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)))
    {
        cout << "Create Socket Error!" << endl;
        return 0;
    }

    //Create Success
    sockaddr_in serverAddress;
    memset(&serverAddress,0,sizeof(sockaddr_in));
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    serverAddress.sin_port = htons(9224);

    //bind
    if (SOCKET_ERROR == (bind(serverSocket, (sockaddr*)&serverAddress, sizeof(serverAddress))))
    {
        cout << "socket bind error" << endl;
        return 0;
    }
    
    //listen
    if (SOCKET_ERROR == (listen(serverSocket, SOMAXCONN)))
    {
        cout << "Listern Erroe!" << endl;
        return 0;
    }
    return serverSocket;
}

//main
int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsa;
    if (0 != WSAStartup(MAKEWORD(2, 2), &wsa))
    {
        cout << "Init Sockt Error!" << endl;
        return -1;
    }

    SOCKET sockt=StartServer();

    _beginthread(ReceiveConnectThread, 0, &sockt);

    system("pause");

    return 0;
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: Hash表
下一篇: MFC error MSB8031
种地瓜
粉丝 9
博文 177
码字总数 45450
作品 0
深圳
程序员
私信 提问
Iperf 源代码分析(四)

Socket 类 Socket的定义和实现分别在文件Socket.hpp和 Socket.cpp中。它的主要功能是封装了socket文件描述符、此socket对应的端口号,以及socket接口中的listen, accept, connect和close等函...

KiteRunner
2014/05/25
0
0
MySQL-----多实例配置

1.1 MySQL实例---多实例配置 1.1.1 多实例概述 多套后台进程+线程+内存结构 多个端口,多个配置文件,多个日志文件,多个socket,多个server_id 多套数据 ##PS:安装多实例前,首先确保MySQL...

zack01
07/12
0
0
android ssl验证、https验证

Keytool工具的使用。 在用Android平台上使用SSL,第一步就是生成证书。 1、证书的生成 1.1生成服务器端的证书py keytool -genkey -alias test -keystore test.jks 1.2 将keystore中的cert导出...

ViceCode
2014/02/10
0
0
TeamTalk源码分析(三) —— 服务器端的程序架构介绍

通过上一节的编译与部署,我们会得到TeamTalk服务器端以下部署程序: dbproxyserver file_server httpmsgserver login_server msfs msg_server push_server router_server 这些服务构成的拓扑...

analogous_love
2017/05/10
0
0
java socket 编程三步走

第一步 充分理解Socket   1.什么是socket   所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。  ...

manlianman
2014/02/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

配置防盗链、访问控制Directory、访问控制FilesMatch

11月19日任务 11.25 配置防盗链 11.26 访问控制Directory 11.27 访问控制FilesMatch 通过限制referer来实现防盗链的功能 配置文件增加如下内容 <Directory /data/wwwroot/www.123.com> SetE...

zgxlinux
25分钟前
2
0
docker搭建redis环境

docker 搭建redis单机,主从,哨兵,集群环境: https://github.com/grace-233/docker-config-file/tree/master/redis...

grace_233
33分钟前
2
0
机器学习:从入门到晋级

摘要: 什么是机器学习,为什么学习机器学习,如何学习机器学习,这篇文章都告诉给你。 目前,人工智能(AI)非常热门,许多人都想一窥究竟。如果你对人工智能有所了解,但对机器学习(Machi...

阿里云官方博客
38分钟前
3
0
FFT数据为空

项目地址:https://github.com/zhangjianli/FlutterMusicPlugin

whoisliang
44分钟前
1
0
python中.whl文件下载,pandas

安装pandas一直报错,最后找到了这个网址,成功安装,分享一下给大家,下载的时候需要注意下载对应的python版本和电脑系统的whl文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 这上面有很...

上官夏洛特
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部