CSocket客户端(TCP)
首先是UDP和TCP的区别:
UDP是不连接服务器,每次发送数据的时候需要服务器的IP;而TCP是先连接服务器,保持常连接,然后直接发送不需要IP。
下面是TCP客户端:
1、新建项目,TestCSocket。
2、新建一个CSocket的派生类,CSockSon:CSocket。是因为只有CSocket的的虚函数OnReceive才可以在客户端上接收数据,而一个纯CSocket对象的OnReceive是空的,
所以后面要重写此函数来处理接收数据。
3、获得CSockSon的对象。
在Dlg.h中定义一个CSockSon对象:public:CSockSon m_sock;
首先需要在AppInit中初始化SOCKEt:AfxSocketInit();(为什么要初始化可以看Winapi,无非就是打包底层api函数);
在连接按钮函数里:m_sock.Create();(这里可以不加参数,因为是TCP,所有参数在Connect里加入);
m_socku.Connect(CString("192.168.43.74"),8080);(然后连接到服务器IP,没写的参数都是缺省值,代表TCP)
此时已经创建了一个连接到服务器的套接字对象。
4、发送数据到服务器。
m_sock.Send("123","123".GetLenth(),...);(反正TCP就是使用这个函数来发送数据,而UDP是使用SendTo,SendTo里制定了Ip)
5、接收数据。
首先在Dlg.cpp中增加一个方法,用于将从OnReceive中接收到的数据打印出来。
void TestCSocket::OnReceive(LPCTSTR text)//注意两个OnReceive是不一样的,这个是自定义的,text是socket对象的OnReceive方法回调信息,代表接收数据
{
MessageBox(text);
}
接下来,需要在回调函数中将获取的数据传到上面那个函数里。在第二步中的派生类的CSockSon.cpp中重写虚函数OnReceive():
void CSockU::OnReceive(int nErrorCode)
{
CString sziP;//用来存发来IP
UINT nPort;//端口
char s[512];//数据
int rLen=ReceiveFrom(s,sizeof(s),sziP,nPort);//返回值,成功就返回接收长度
s[rLen]=0;//是为了不出现乱码
CTestCSocketDlg *pDlg= (CTestCSocketDlg*)AfxGetMainWnd();//获得主窗口的句柄,需要加入主窗口的头文件#include "TestCSocketDlg.h"
pDlg->OnReceive(s);//调用自定义函数,把s传过去
CSocket::OnReceive(nErrorCode);
}
注意:CWnd* AfxGetMainWnd( );
就是获得应用程序主窗口的指针,AfxGetMainWnd()-> m_hWnd是主窗口的句柄
6、判断一个CSocket是否Create成功:m_socket.m_hSocket == INVALID_SOCKET
CSocket客户端(TCP)的更多相关文章
- (转)公有云vr客户端tcp连接数太多造成 系统卡顿问题 [bittorrent tracker优化] -公有云常见网络问题及思路
在公有云服务器 发现使用tcp(http)的tracker连接数太多 用户太多会造成windows系统卡顿 特此发表一下修改配置和路由器的方法 解决卡顿问题 解决方法1(参考内容): 修改 /etc/ ...
- 服务器端与客户端TCP连接入门(一)
Java中使用Socket(即套接字)完成TCP程序的开发 服务器端使用ServerSocket接收客户端的连接请求,每一个客户端都使用一个Socket对象表示 在服务器端每次运行时都要使用accep ...
- c--socket通信TCP篇
https://www.cnblogs.com/ashen/p/4474360.html #include <sys/socket.h> 2 #include <stdlib.h&g ...
- Qt编写网络调试助手(TCP客户端+TCP服务端+UDP服务端)终极版开源
时隔半年,对网络调试助手工具进行所有代码重写,这次目录结果整齐的一逼,代码整齐的一逼,非常完善了,打死也不再改版了.这次真的打死也不再改版了.旧版本1:http://www.qtcn.org/bbs/ ...
- socket | tcp客户端 tcp服务器 udp客户端 udp 服务器 创建方法
tcp服务器 #coding=utf-8 ''' 这里是tcp服务器端,要先启动 ''' import socket import threading bind_ip = "0.0.0.0& ...
- 服务器端与客户端TCP连接入门(三:多线程)
对于服务器端来说,如果要加入多线程机制,则应该在每个用户连接之后启动一个新的线程 建立一个EchoThread类,此类专门用于处理多线程操作,此时的多线程使用Runnable接口实现 package ...
- 服务器端与客户端TCP连接入门(二)
1.服务器端程序 package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.I ...
- node.js中net模块创建服务器和客户端(TCP)
node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...
- linux 服务器/客户端 tcp通信的简单例子
昨天弄了sublime之后没有弄输入中文的了,学生党来着,刚好可以练练英语(英语渣渣,还要考六级),所以注释都写英文的(语法什么的就别太深究了) 服务器端: /*start from the very ...
随机推荐
- sql语句中的 inner join 、 left join 、 right join、 full join 的区别
简单明了地说,连接分内连接和外链接 假设有A和B两张表 内连接:inner join 表示把AB表的记录相符都显示出来,把AB表不符合条件的都排除 外连接分三种,即左连接(LEFT OUTER J ...
- II7下配置SSAS通过HTTP 远程链接访问
IIS7下配置SSAS通过HTTP远程连接 安装环境操作系统:Windows7.Windows Server2008IIS版本:7.5 IIS7下配置SSAS通过HTTP远程连接详细的步骤如下:1.首 ...
- paper 75:使用MATLAB的神经网络工具箱创建神经网络
% 生成训练样本集 clear all; clc; P=[110 0.807 240 0.2 15 1 18 2 1.5; 110 2.865 240 0.1 15 2 12 1 2; 110 2.5 ...
- 夺命雷公狗—angularjs—20—$watch监听的用法
- [记录]firefox繁体转换成简体的油猴脚本
// ==UserScript== // @name 繁简转换 // @include *.* // @author yecao // @version 0.1 // @include * // @e ...
- 50136142WXY的百度地图
50136142WXY的百度地图 [试题描述] 社团里的WXY童鞋今天要出去旅游啦(他现在在北京为1号城市),决定去朝鲜平壤(N号城市).但是很穷的WXY没有钱坐飞机,只好坐汽车去朝鲜了.但是车上的百 ...
- 如何在视频处理控件TVideoGrabber中设置音频捕捉设备
TVideoGrabber不仅可以捕捉视频,还可以作为多媒体播放器,并支持包括C#..NET.VB.NET.C++.Delphi.C++Builder和ActiveX平台,本文将剖析TVideoGra ...
- 161027、Java 中的 12 大要素及其他因素
对于许多人来说,"原生云"和"应用程序的12要素"是同义词.本文的目的是说有很多的原生云只坚持了最初的12个因素.在大多数情况下,Java 能胜任这一任务.在本 ...
- 161025、java提高篇之关键字static
一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或 ...
- windows prompt personalize 设置cmd提示的相关
由于有一篇随笔种我说要引用这篇文章,所以不得已也出来了,就像你说大话『我明天去吃屎』,结果你做到了. 我这记录一下有关windows prompt这是的变量,我不知道这算不算变量,因为windows变 ...