C++ 服务端 console

 1 // StockSrv.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <process.h>
 7 #include <WinSock2.h>
 8 #pragma comment(lib,"Ws2_32.lib")    //fatal error LNK1120: 12 个无法解析的外部命令
 9
10 using namespace std;
11 #define PORT 8090
12
13 //子线程函数需要放调用者的前面
14 unsigned int __stdcall RecvThreadFunc( void* pArguments )
15 {
16     printf("RecvThreadFunc:ID号 = %4d is starting!\n", GetCurrentThreadId());
17     SOCKET ClientSocket = (SOCKET)pArguments;
18
19     //接收数据
20     char recvBuf[100];
21     recv(ClientSocket,recvBuf,100,0);
22     printf("recvBuf = %s\n",recvBuf);
23
24     //发送数据
25     char sendBuf[100];
26     sprintf_s(sendBuf,"test data:sendBuf");
27     send(ClientSocket,sendBuf,strlen(sendBuf)+1,0);
28     printf("sendBuf = %s\n",sendBuf);
29
30     _endthreadex( 0 );    //释放 threadIDdata, 再 ExitThread()
31     return 0;
32 }
33
34 int _tmain(int argc, _TCHAR* argv[])
35 {
36
37     WORD wVersionRequested;
38     WSADATA wsaData;    //WSADATA 结构体主要包含了系统所支持的Winsock版本信息
39     int err;
40
41     wVersionRequested = MAKEWORD(2,2);
42     err = WSAStartup(wVersionRequested,&wsaData);    //加载套接字库
43     if (err != 0)
44     {
45         cout << "初始化 Socket 失败:" << GetLastError() << endl;
46         return 0;
47     }
48     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
49     {
50         WSACleanup();
51         return 0;
52     }
53
54     //创建用于监听的套接字
55     SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
56
57     SOCKADDR_IN addrSrv,addrClient;    //TCP/IP 套接字指定套接字的地址
58     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
59     addrSrv.sin_family = AF_INET;
60     addrSrv.sin_port = htons(PORT);
61     int len = sizeof(SOCKADDR);
62     //绑定套接字
63     if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) != 0)
64     {
65         cout<<"绑定 Socket 失败:"<<GetLastError()<<endl;
66         return 0;
67     }
68     //将套接字设为监听模式,准备接收客户请求
69     if(listen(sockSrv,5) == SOCKET_ERROR)
70     {
71         return 0;
72     }
73     cout << "服务端已经启动,正在监听" << endl;
74     while (TRUE)
75     {
76         //等待客户请求到来
77         SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
78
79         unsigned threadID;
80         HANDLE hThread = (HANDLE)_beginthreadex(NULL,0,RecvThreadFunc,(void *)sockConn,0, &threadID);
81         WaitForSingleObject(hThread, INFINITE); //阻塞等待新线程结束
82         CloseHandle(hThread); //关闭句柄
83
84         //关闭套接字
85         closesocket(sockConn);
86     }
87     return 0;
88 }
时间: 2024-08-01 20:25:08

C++ 服务端 console的相关文章

动手学习TCP:服务端状态变迁

上一篇文章介绍了TCP状态机,并且通过实验了解了TCP客户端正常的状态变迁过程. 那么,本篇文章就一起看看TCP服务端的正常状态变迁过程 服务端状态变迁 根据上一篇文章中的TCP状态变迁图,可以得到服务器的正常状态变迁流程如下: CLOSED -> LISTEN -> SYN_RECV -> ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED 具体的将状态跟TCP包关联起来就如下表示: From State To State

Android WebView与服务端交互Demo

使用WebView可以让Android端的开发工作大量减少,原因是在服务端可以为其做一定的工作,下面这个小Demo就实现了从Android客户端与服务端的交互.我这里客户端使用的工具是Eclipse,服务端使用MyEclipse. 实现效果图: 客户端: 点击登录按钮后,页面跳转,而在服务端Console中看到如下(只看最后一行即可): 可以看到服务端收到了客户端发过来的用户名:yao. 源代码: 客户端: activity_main: <RelativeLayout xmlns:android

小程序服务端集成微信支付

摘要: 换取openid->统一下单->发起支付,三步走,其中二次签名比较坑人. 该demo源码已托管到码云:http://git.oschina.net/dotton/lendoo-wx,欢迎下载. 理论上集成微信支付的全部工作可以在小程序端完成,因为小程序js有访问网络的能力,但是为了安全,不暴露敏感key,而且可以使用官方提供的现成php demo更省力,于是在服务端完成签名与发起请求,小程序端只做一个wx.requestPayment(OBJECT)接口的对接. 整体集成过程与JSAP

谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现

一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者在学习时期和客户端美术策划的小伙伴一起做的游戏,笔者主要负责游戏服务端开发,客户端也参与了一部分,同时也是这个项目的发起和负责人.这次主要分享这款游戏的服务端相关的设计与实现,从整体的架构设计,到服务器网络通信底层的搭建,通信协议.模型定制,再到游戏逻辑的分层架构实现.同时这篇博客也沉淀了笔者在游戏公司实践五

Asp.net SignalR 实现服务端消息推送到Web端

原文:http://www.cnblogs.com/wintersun/p/4148223.html 之前的文章介绍过Asp.net SignalR,  ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.  今天我们来实现服务端消息推送到Web端,   首先回顾一下它抽象层次图是这样的: 实际上 Asp.net SignalR 2 实现 服务端消息推送到Web端, 更加简单. 为了获取更好的可伸缩性, 我们引入消息队列, 看如下

服务端REST与SOAP的探讨

REST简介 在开始我们的正式讨论之前,让我们简单看一下REST的定义. REST(Representational State Transfer)是Roy Fielding提出的一个描述互联系统架构风格的名词.为什么称为REST?Web本质上由各种各样的资源组成,资源由URI唯一标识.浏览器(或者任何其它类似于浏览器的应用程序)将展示出该资源的一种表现方式,或者一种表现状态.如果用户在该页面中定向到指向其它资源的链接,则将访问该资源,并表现出它的状态.这意味着客户端应用程序随着每个资源表现状态

创建自托管的SignalR服务端

微软官方例子地址:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host 1.说明: SignalR服务端可以使Asp.net程序,也就可以是控制台或服务程序这种不需要再IIS上托管的程序.这就是本篇文章的内容介绍. 2.安装扩展: 使用Nuget控制台:Install-Package Microsoft.AspNet.SignalR.SelfHost自托管服务端所需要的程序集. Install-Pack

C# socket异步 服务端

转自:  http://blog.csdn.net/qq_20282263/article/details/54310737 1 private Dictionary<string, Session> SessionPool = new Dictionary<string, Session>(); 2 private Dictionary<string, string> MsgPool = new Dictionary<string, string>();

hubilder打包+C#服务端个推服务实现

关于推送鼓捣了好长时间,这里不再写helloworld了,只讲里面遇到的问题. 1.关于苹果开发者平台上的注册 网上很多的教程,只要按照步骤来设置就行了,在 iOS证书(.p12)和描述文件(.mobileprovision)申请 这篇文章里面讲的很清楚,文章中也说明了,如果要使用推送功能,那么在申请AppID的时候要选择“Push Notifications”这个选项.这篇文章说的很详细,总结下来有下面几点内容 1.申请苹果AppID,一个App里的证书都基于这个AppID2.生成证书请求文件