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 ...
随机推荐
- Java Switch(String)
package shb.java.test; /** * switch支持字符串 * @Package:shb.java.test * @Description: * @author shaobn * ...
- [转]iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.
解决: 应用程序池启动32位应用程序 设置托管管道为集成 (仍然有问题) 试试以下方法: http://phpwind.me/1222.html 楼主 发表于: 2011-11-26 图片: ...
- Envelope对象介绍
Envelope也称包络线,是一个矩形区域,是每个几何形体的最小外接矩形.每个Geometry都拥有一个Envelope,包括Envelope自身. 它定义了XMax,XMin,YMax,YMin,H ...
- access调用联系
using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; us ...
- 【crunch bang】字体美化
中文字体美化是个很讨厌的事情,无数初学者在这里面浪费了无数时间,做了无数没有意义的事情.但这也是不得不做的,我把 Debian/Ubuntu 所需要的中文字体美化操作步骤详细记录在这里,希望能节约大家 ...
- SSAS更改默认端口号,使用非默认端口号的时候Olap连接字符串的格式
Sql server的Analysis Service服务默认使用的是2382或2383端口,但是实际上我们可以通过配置文件手动更改SSAS使用其它端口号. 修改SSAS使用端口号的方法如下,找到你的 ...
- 启用 TStringGrid 的自画功能,并避免重影
FMX 控件的 TStringGrid 下,有时为了让不同行或不同 Cell 的显示颜色.字体等有各种不同的颜色, 必须采用自画, 即在其 OnDrawColumnCell 事件中写自己的控制代码显示 ...
- 161012、JAVA读写文件,如何避免中文乱码
1.JAVA读取文件,避免中文乱码. /** * 读取文件内容 * * @param filePathAndName * String 如 c:\\1.txt 绝对路径 * @return boole ...
- Android消息处理机制(Handler 与Message)---01
一.handler的使用场景为么会有handler?(部分内容图片摘自http://www.runoob.com/w3cnote/android-tutorial-handler-message.ht ...
- eclipse内置tomcat启动方法
tomcat:run -Dmaven.tomcat.port=