当前位置:首页 » 编程语言 » csocketjava

csocketjava

发布时间: 2022-11-26 10:32:11

⑴ j2me socket连接有问题

ssc.acceptAndOpen();
服务器等待连接,如果没有连接则阻塞。

你把这两个Midlet都运行了(先运行服务器,再客户端)
服务器启动,先等待连接,这时候System.out.println("hello world");不会执行
当客户端启动后,看看是不是打出来了?

java上传文件到服务器老是报错socket write error

我用C++中的socket进行传文件操作,用的是Win socket API,不是VC封装好的那个CSocket,当我向客户端上传文件到服务端的时候

⑶ 关于java socket 的问题

不忍心..
1. 写个config.txt 内容如下:
ip = xxx.xxx.xxx.xxx
port = ####

2. 写如下代码获取ip和port
Properties prop = new Properties();
InputStream in = new FileInputStream("config.txt");// full path
prop.load(in);
in.close(); // catach exception
String ip = (String)prop.get("ip");
String portValue = (String)prop.get("port");

自己整理下.. Properties 在 java.util 包里面..

⑷ 急求:网络问题:伯克利套接字是什么

本文介绍 Windows Sockets 的性质和用途。其他内容还包括:

定义术语“套接字”。
描述 SOCKET 句柄数据类型。
描述套接字的用途。

Windows Sockets 规范为 Microsoft Windows 定义了一个二进制兼容网络编程接口。Windows Sockets 基于 Berkeley Software Distribution(BSD,4.3 版)中的 UNIX 套接字实现,后者是美国加州大学伯克利分校开发的。该规范包括针对 Windows 的 BSD 样式套接字例程和扩展。通过使用 Windows Sockets,应用程序能够在任何符合 Windows Sockets API 的网络上通信。在 Win32 上,Windows Sockets 提供线程安全。

许多网络软件供应商支持网络协议下的 Windows Sockets,这些协议包括:传输控制协议/网际协议 (TCP/IP)、Xerox 网络系统 (XNS)、Digital Equipment Corporation 的 DECNet 协议和 Novell Corporation 的互联网包交换协议/顺序分组报文交换协议 (IPX/SPX) 等。虽然目前的 Windows Sockets 规范定义了 TCP/IP 的套接字抽象化,但任何网络协议都可以通过提供自己版本的、实现 Windows Sockets 的动态链接库 (DLL) 来满足 Windows Sockets。用 Windows Sockets 编写的商用应用程序示例包括 X Windows 服务器、终端模拟器和电子邮件系统。

注意: Windows Sockets 的用途是将基础网络抽象出来,这样,您不必对网络非常了解,并且您的应用程序可在任何支持套接字的网络上运行。因此,本文档不讨论网络协议的细节内容。

Microsoft 基础类库 (MFC) 通过提供两个类来支持使用 Windows Sockets API 进行编程。其中一个类为 CSocket ,它提供高级抽象化来简化网络通信编程。

Windows Sockets 规范“Windows Sockets:用于 Microsoft Windows 环境下的网络计算的开放接口”现在为 1.1 版本,它是 TCP/IP 群体中一个由个人和公司组成的大团体开发的,是一个开放的网络标准,可免费使用。套接字编程模型当前支持一个“通信域”,该“通信域”使用网际协议组 (Internet Protocol Suite)。该规范可在 Platform SDK 中获得。

提示: 因为套接字使用网际协议组,所以它们对于支持“信息高速公路”上 Internet 通信的应用程序是首选方式。

套接字的定义

套接字是一个通信终结点,它是 Windows Sockets 应用程序用来在网络上发送或接收数据包的对象。套接字具有类型,与正在运行的进程相关联,并且可以有名称。目前,套接字一般只与使用网际协议组的同一“通信域”中的其他套接字交换数据。

这两种套接字都是双向的,是可以同时在两个方向上(全双工)进行通信的数据流。

可用的套接字类型有以下两种:

流式套接字

流式套接字提供没有记录边界的数据流,即字节流。字节流能确保以正确的顺序无重复地被送达。

数据文报套接字

数据文报套接字支持面向记录的数据流,但不能确保能被送达,也无法确保按照发送顺序或不重复。

“有序”指数据包按发送的顺序送达。“不重复”指一个特定的数据包只能获取一次。

注意: 在某些网络协议下(如 XNS),流可以面向记录,即作为记录流而非字节流。但在更常用的 TCP/IP 协议下,流为字节流。Windows Sockets 提供与基础协议无关的抽象化级别。

有关上述类型以及各种套接字适用情形的信息,请参见 Windows Sockets:流式套接字和 Windows Sockets:数据文报套接字。

SOCKET 数据类型

每一个 MFC 套接字对象封装一个 Windows Sockets 对象的句柄。该句柄的数据类型为 SOCKET。SOCKET 句柄类似于窗口的 HWND。MFC 套接字类提供对封装句柄的操作。

Platform SDK 中详细描述了 SOCKET 数据类型。

套接字的用途

套接字的作用非常大,至少在下面三种通信上下文中如此:

客户端/服务器模型。
对等网络方案,如聊天应用程序。
通过让接收应用程序将消息解释为函数调用来进行远程过程调用 (RPC)。

⑸ 如何创建一个CSocket类的派生类

类向导 继承CSocket 就行了

⑹ java socket 阻塞和非阻塞 会对数据传输有什么影响

阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。 非阻塞 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。 对象的阻塞模式和阻塞函数调用 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。函数select就是这样的一个例子

⑺ 这段java代码是什么意思

这一段代码是Java多线程和Socket通信相关的,大致一看跟一般的聊天室demo有些相似
建议您先学习一下Java多线程的基础知识
了解一下Runable接口和Thread类,以及了解相关Socket初步知识

importjava.io.IOException;
importjava.io.PrintStream;
importjava.net.ServerSocket;
importjava.net.Socket;

/**
一个多线程的类,实现了Runable接口
*/
{
Socketcsocket;

/**
构造器,传入一个Sock对象
*/
MultiThreadServer(Socketcsocket){
this.csocket=csocket;
}

/**
主函数入口
*/
publicstaticvoidmain(Stringargs[])
throwsException{
//实例化一个socket对象
ServerSocketssock=newServerSocket(1234);
System.out.println("Listening");
while(true){
Socketsock=ssock.accept();
System.out.println("Connected");
//启动线程
newThread(newMultiThreadServer(sock)).start();
}
}

/**
线程的run方法
*/
publicvoidrun(){
try{
PrintStreampstream=newPrintStream
(csocket.getOutputStream());
for(inti=100;i>=0;i--){
pstream.println(i+
"bottlesofbeeronthewall");
}
pstream.close();
csocket.close();
}
catch(IOExceptione){
System.out.println(e);
}
}
}

⑻ 跪求凌阳61单片机设计的语音识别系统的主程序

凌阳61单片机实现RCL,由C语言编写,凌阳61板实现功能-,C++ Builder,单片机开发/SCM
autocad预览控件.不需要安装autocad即可在界面浏览-,Delphi,绘图程序/Graph Drawing
本程序为基于matlab的小波分析的应用实例。-,matlab,界面编程/GUI Develop
高通brew平台上的BUIW控件中的ImageStaticWidget使用示例-,Visual C++,Static控件/Static control
客观合理化一天一片人体豆腐花规范化广泛非官方大哥大法国-,C++ Builder,界面编程/GUI Develop
本程序为基于matlab的插值分析与Euler解常微分方程的应用实例。-,matlab,界面编程/GUI Develop
用ASP.NET做的酒店管理系统,该系统主要处理酒店日常运营中涉及的客户信息.-,ASP,其他书籍/Other Books
EVC 读写INI文件 EVC 读写INI文件EVC 读写INI文件EVC 读写INI文件EVC 读写INI文件-,Visual C++,文件操作/File Operate
本程序介绍基于matlab的平方根及改进平方根算法。-,matlab,按钮控件/Button control
高通brew平台上的BUIW控件中的slider的示例程序-,Visual C++,界面编程/GUI Develop
塔顶地无可奈何花落去 人威风扫地雪 可耕地枯无可奈何花落去 无可奈何花落去饿-,Visual C++,GDI/图象编程/GDI-Bitmap
oblog31sql oblog31sql oblog31sql oblog31sql oblog31sql-,ASP,Web服务器/Web Server
MATLAB实现简单图象处理的程序,在matlab2006a上通过-,matlab,matlab例程/matlab
源码、运行程序、帮助文件、必须的数据库文件-,Windows_Unix,C#编程/CSharp
dos下的TCP/IP栈库函数,并提供了多种tcp/ip编程demo。 -,DOS,TCP/IP协议栈/TCP/IP Stack
MATLAB进入时显示的图标的程序实现,有动画效果!-,matlab,matlab例程/matlab
地方官梵蒂冈地方官法 方法方法方法方法方法 -,Unix_Linux,TreeView控件/TreeView
几个matlab的编程实例,对初学者有一定的帮助。-,matlab,界面编程/GUI Develop
用ASP.NET做的客户管理系统,该系统以客户管理中涉及的销售管理,合同管理为主体.-,ASP,其他书籍/Other Books
毕毕剥剥毕毕剥剥爸爸 毕毕剥剥毕毕剥剥爸爸 -,DOS,Static控件/Static control
将数据库的资料转档到EXCEL里进行保存-,Delphi,其他小程序/Other windows programs
数字图像中队图像进行模板匹配算法之前的预处理算法!-,Visual C++,图形/文字识别/Graph Recognize
存车处存车处存车处厂 滴滴答答滴滴答答得到 -,DOS,编辑框/EditBox
实数编码GA,也是从网上下载的。非要上传5个才能下载,哎,实在是没办法啊,这个也不知道能不能运行,不能的话请不要骂我哦,谢谢!!-,Visual C++,人工智能/AI-NN-PR
DS1302+AT89C2051的LED钟,可以显示年、周、月、日、小时、分钟、秒-,TEXT,其他小程序/Other windows programs
可耕地 唇形枯 要一地三三大哥有在一码元表的有遥有-,Visual C++,TreeView控件/TreeView
用JAVA写的遗传算法的例子,比较简单,如果解压缩的时候需要密码的话,应该是“1”。写的比较简单。是老早以前写的了。-,Java,人工智能/AI-NN-PR
汇编语言,用C51单片机实现交通灯控制!二极管模拟发光!-,Asm,单片机开发/SCM
通过串口控制步进电机控制器,实现联络,速度控制,步长-,Visual C++,串口编程/Com Port
绝佳的Tab View控件的方式之一,VC++6.0经过运行调试的,可直接使用-,Visual C++,TreeView控件/TreeView
以某中小规模汽车维修厂为案例,用ASP.NET做的仓库管理系统.-,ASP,其他书籍/Other Books
关机程序。。。。。。。。。。。。。。。。。-,Visual C++,Windows编程/Windows Develop
绝佳的Tab View控件的方式之二,VC++6.0经过运行调试的,可直接使用-,Visual C++,界面编程/GUI Develop
在VC6下基于OpenCV的轮廓检测程序,其中图像的二值化操作基于Canny和自适应阈值。通过trackbar来实现不同情况下的轮廓检测。-,Visual C++,图形/文字识别/Graph Recognize
绝佳的Tab View控件的方式之三,VC++6.0经过运行调试的,可直接使用-,Visual C++,界面编程/GUI Develop
用于首先获取需要下载的文件的大小,然后将其分块下载。-,Java,网络编程/WinSock-NDIS
用csocket模拟聊天室,可以在一台机子上模拟,也可以在不同机子上-,Visual C++,网络编程/WinSock-NDIS
这个好象也是从网络上找到一个基本遗传算法的例子,解压缩的时候如果需要密码的话,应该是“1”。-,Visual C++,人工智能/AI-NN-PR
本程序是运用java 语言 编写一款查看 网站源文件的程序 -,Java,其他/Other systems
使用C语言实现菜单控制的源程序,实现了学生成绩的管理.-,C-C++,界面编程/GUI Develop
在打开图像时,点击图像可在打开对话框中实时看到预览,绝好.-,Visual C++,界面编程/GUI Develop
用ASP.NET做的合同管理系统,该系统包括合同进展控制模块,员工管理模块,客户管理模块,项目管理模块,合同管理模块和合同统计模块等.-,ASP,其他书籍/Other Books
语音识别与合成工具箱.具有如下功能:时域分析,频域分析,LPC分析与合成等.-,matlab,matlab例程/matlab

⑼ 易语言实时检测

[转]基于多线程的CSocket网络编程技术

收藏人:BuYuLibrary

2015-06-09 | 阅:1 转:20
MFC下使用CSocket或者CAsyncSocket进行Socket通信,CSocket继承自CAsyncSocket。这两者的区别在于,CSocket是同步的Socket,CAsyncSocket则是异步的。使用时,CSocket::Receive()和CSocket::Send()函数会阻塞当前线程,直至操作完成;而CAsyncSocket::Receive()和CAsyncSocket::Send()函数则不阻塞线程,函数立即返回。所以这两者在使用方式上有所不同。这里探讨一种使用CSocket配合CSocketFile、CArchive和CThread的多线程C/S模式。
{网络通信主要有阻塞和非阻塞两种编程,前者是可靠连接通信(相当于一问须一答方式),后者只是传声筒,只管发出去,不管接收}
CSocket通过CSocketFile由CArchive管理,可以得到类似iostream方式的流输入输出。这种方式的主要过程有:创建连接、接受数据、发送数据和断开连接。CSocket必须附加在与其一起工作的线程上,不能通过其他线程调用,所以主要通过在线程之间的传递消息和加锁实现线程的通信和同步。我们将分服务端(Server)和客户端(Client)分别讨论具体实现。
{流文件方式通信,很方便对各数据类型读写操作,实现数据传输(JAVA基本传输就是这种模式)。CSocket必须在一个工作线程内实现,不能分开在不同的线程上}
1.服务端
服务端有一个主界面,其类为CSCEServerDlg,继承自CDialog,它保存线程池和锁。为了简单起见,后面的类声明中大部分的成员变量访问控制都是public。{主应用程序线程,采用线程池(保存线程的列表)和锁进行同步运行控制,创建服务端的Socket(m_socketListen)监听客户连接。}声明类似如下:

typedef list<CWinThread*> PThreadList;
class CSCEServerDlg : public CDialog
{
...
public:

CCriticalSection m_csThrdList; // 线程池锁
PThreadList m_thrdList; // 线程池
int m_thrdIndex; // 线程计数器

CServerSocket m_socketListen // 监听CSocket

};
和CSocket一起工作的线程类为CSerSocketThread,继承自CWinThread。这里使用CWinThread是因为它可以处理消息,这样便于线程间通信。重载了CWinThread::InitInstance(),在线程建立时做处理,具体实现在后面会有。声明如下:{采用可以处理消息传递的CWinThread线程类,把Socket工作绑定到该线程上去}

class CSerSocketThread : public CWinThread
{
DECLARE_DYNCREATE(CSerSocketThread)
public:
CSerSocketThread(void);
~CSerSocketThread(void);
virtual int ExitInstance();
virtual BOOL InitInstance();
int m_thrdIndex;

CSCEServerDlg* m_pSerDlg; // 主界面指针

SOCKET m_hSocket; // Socket 句柄
CServerSocket m_serverSocket; // 附加在这个线程上的CSocket
CSocketFile* m_socketFile; // CSocketFile

CArchive* m_arIn; // 输入CArchive
CArchive* m_arOut; // 输出CArchive
...

protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnCustomMsg(WPARAM wParam,LPARAM lParam);
void ReceiveData();
void SendData(const int WP, const CString& strMsg);
...
};
我们使用的具体的CSocket类是CServerSocket,继承自CSocket,重载了CSocket::OnAccept()函数和CSocket::OnReceive()函数。监听端口的CSocket在有Socket连接时会调用OnAccept()函数处理连接的建立。当已经连接的CSocket接收到数据时,则会调用OnReceive()函数,这里要注意的是,如果对方发送的数据较大,则有可能被分成多次发送,这种情况下会多次调用OnReceive()函数,后面会提高如何来处理这个问题。同样的道理,在发送数据时则会调用OnSend()函数,这里我们不会用到它。{服务端的Socket类主要是接收客户端的连接和接收客户端数据,当接收数据很大时,采用多次发送和接收方式(这是采用CSocketFile方式的好处,自动处理数据量传输大小)}

CServerSocket的声明:

class CServerSocket :
public CSocket
{
public:
CServerSocket(void);

~CServerSocket(void);
virtual void OnAccept(int nErrorCode);
virtual void OnReceive(int nErrorCode);
CSCEServerDlg* m_pSerDlg; // 主界面指针
CWinThread* m_pThrd; // 该CSocket所在的线程
int m_thrdIndex; // 该CSocket所属线程的index,服务 Socket 为 -1
};
{除了Socket类绑定到工作线程上,Socket类中也包含其工作线程指针和主程序指针}
OnAccept()函数的实现:
void CServerSocket::OnAccept(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
if(nErrorCode == 0)
{
// 创建一个连接Socket
CServerSocket connectSocket;
Accept(connectSocket); // connectSocket将和客户端连接
// 创建一个线程

CSerSocketThread* pThread =
(CSerSocketThread*)AfxBeginThread(
RUNTIME_CLASS(CSerSocketThread),

THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
{服务端Socket得到客服端连接,要创建一个连接的Socket与客户端连接通信(以后这个连接Socket与客户端绑定通信),创建一个线程来为连接Socket服务}
// 添加到线程池中
m_pSerDlg->m_csThrdList.Lock(); // 加锁
m_pSerDlg->m_thrdList.push_back(pThread);
m_pSerDlg->m_csThrdList.Unlock(); // 解锁

pThread->m_pSerDlg = m_pSerDlg;
/*
* 将CSocket交给新建的线程
* 这样这个CSocket将和新建的线程一起工作
* 注意现在是在界面线程中,因为是监听CSocket,是CServerDlg的成员变量
* 必须通过Detach()得到HANDLE之后在工作线程中重新Attach()才行
*/
{如何把创建的Socket绑定到新建的工作线程中?现在用服务端Socket是在主应用程序中,用Detach、attach对Socket进行解绑、加绑,即把主线程中创建的连接Socket“离开”主线程,附加在工作线程上}
pThread->m_hSocket = connectSocket.Detach();
// 线程编号,通过这个在通信时区别不同的客户端
{如何区分各工作线程(与客户端连接通信的Socket)?通过主程序(主线程)中的id标示}
pThread->m_thrdIndex = m_pSerDlg->m_thrdIndex++;
// 启动线程
pThread->ResumeThread();
}
CSocket::OnAccept(nErrorCode);
}
当监听CSocket监听到有客户端接入,调用OnAccept()函数。通过Accept()函数将连接建立,之后建立一个新的线程,让连接的CSocket附加上去,将线程加入线程池,OnAccept()函数的主要工作就完成了。
{各连接客户端的工作线程是在监听接受函数中创建}
OnReceive()函数的实现:

void CServerSocket::OnReceive(int nErrorCode)
{
// 通过自定义消息WM_THREAD和消息参数WP_RECV通知线程去读取数据
{由Socket绑定的线程通过消息去通知接收数据}
m_pThrd->PostThreadMessage(WM_THREAD, WP_RECV, 0);
//CSocket::OnReceive(nErrorCode);
}
当接收到数据时,CServerSocket就通知它附加的线程去接收数据,以便进一步处理。
下面看一下CSerSocketThread的几个处理的实现:
InitInstance()函数,这个函数在新线程被构造出来后调用,用来完成一些自定义的新建过程:
BOOL CSerSocketThread::InitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
if (!AfxSocketInit()) // 初始化CSocket必须调用的
{
return CWinThread::InitInstance(); // 立刻退出
}
{对服务端Socket附加的socket句柄}
if(m_serverSocket.Attach(m_hSocket)) // 重新Attach之前传入的Socket
{
m_serverSocket.m_pThrd = this; // 告诉CSocket它所附加工作的线程
m_serverSocket.m_thrdIndex = m_thrdIndex;
m_serverSocket.m_pSerDlg = m_pSerDlg;
// 建立CSocketFile,将CSocket附加在上面
{把服务端Socket绑定到sockfile上,通信采用文件流方式进行}
m_socketFile = new CSocketFile(&m_serverSocket);
// 输入CArchive
m_arIn = new CArchive(m_socketFile, CArchive::load);
// 输出CArchive
m_arOut = new CArchive(m_socketFile, CArchive::store);
return TRUE; // 这样线程就不会立刻退出
}
return CWinThread::InitInstance(); // 立刻退出
}
当新线程构造好了之后,InitInstance()函数被调用。将传入的CSocket的HANDLE重新Attach到线程自己的CSocket成员上,之后建立CSocketFile和两个CArchive用于输入输出,这里CSocketFile会互斥访问,输入和输出的CArchive无法并发操作它。
{新线程构造调用InitInstance(),应是线程启动调用}
之前的CServerSocket::OnReceive()中通过消息通知线程来接受数据,下面看具体的实现。
首先声明将WM_THREAD消息绑定到CSerSocketThread::OnCustomMsg()函数:

BEGIN_MESSAGE_MAP(CSerSocketThread, CWinThread)
ON_THREAD_MESSAGE(WM_THREAD, OnCustomMsg)
...
END_MESSAGE_MAP()
OnCustomMsg()函数的实现:

void CSerSocketThread::OnCustomMsg(WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
case WP_RECV:
// 接收数据
// 先把接收数据事件关掉
{关闭接受数据,避免后续接受数据不停传来,造成处理堵塞,这样读写一次完成}
m_serverSocket.AsyncSelect(FD_CLOSE);
*m_arIn >> ...; // 读取数据
// 重新打开接收数据事件
m_serverSocket.AsyncSelect(FD_READ|FD_CLOSE);
...
break;
...
}
}
接收到的WM_THREAD消息包含WP_RECV的消息参数后,首先先关掉接收数据事件,这样就可以通过CArchive的operator >>一次读取完所有数据(根据自己定义的方式),读取完成后再打开接收数据事件。通过这个流程,每次数据发送就只会调用一次OnReceive()函数。这里要注意的是必须用CArchive的operator >>根据发送的情况正确的读取数据,最好都读取出来,否则下次读取时可能会出现错误。
{CArchive读写顺序要一致}
如果需要发送数据,则在CSerSocketThread线程中使用CArchive的operator <<发送所有支持operator <<的类型。注意的是必须是在这个工作线程中调用,CSocket是附加在线程上的,同样CArchive也只能在工作线程上使用,如果通过别的线程调用,就和系统的Socket表不对应了。另外还有注意的是输出完后需要显式调用CArchive::Flush()将数据发出。
{同一线程读写(接收和发射)}
主界面对CServerSocket的使用则比较简单,如下:

m_socketListen.m_pSerDlg = this;
if (!AfxSocketInit()) // Socket初始化
SomeMessageFunc("SOCKET 初始化失败!");
else if (!m_socketListen.Create(xxxx)) // 创建监听Socket
SomeMessageFunc("监听 SOCKET 创建失败!");
else if (!m_socketListen.Listen()) // Socket监听
SomeMessageFunc("监听 SOCKET 监听失败!");
else
SomeMessageFunc("监听建立");
2.客户端
客户端部分的大部分处理和服务端是类似的,主要区别在于客户端主动连接服务端的监听端口。客户端首先建立工作线程,在线程重载的InitInstance()函数中建立到服务端的连接,成功就继续工作,失败就停止线程即可。之后当CSocket接收数据是,调用重载的OnReceive()函数,通过消息通知工作线程使用CArchive读取数据。发送时则由工作线程使用CArchive发送数据,显式调用CArchive::Flush()。
{客户端必须知道服务器端IP和工作端口,才能连接}
连接代码,依然是在:

BOOL CCliSocketThread::InitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
if (!AfxSocketInit()) // 一样的初始化,必须调用
{
return CWinThread::InitInstance();
}
if (!m_clientSocket.Create()) // 建立CSocket
{
SomeMessageFunc("Socket 创建失败");
return CWinThread::InitInstance();
}
m_clientSocket.m_pCliDlg = m_pCliDlg;
CString strIP(”xxx.xxx.xxx.xxx”);
UINT port = xxxx;
if (m_clientSocket.Connect(strIP, port)) // 连接服务端
{
// 连接建立
m_clientSocket.m_thrd = this;
m_socketFile = new CSocketFile(&m_clientSocket);
m_arIn = new CArchive(m_socketFile, CArchive::load);
m_arOut = new CArchive(m_socketFile, CArchive::store);
SomeMessageFunc("连接成功");
return TRUE; // 线程继续工作
}
return CWinThread::InitInstance();
}

⑽ java,能详细解析下这段程序吗,表示看不懂=。=

一个是服务器端的socket监听,一直等待客户端请求,另一个是客户端的socket 向服务器端发送请求

热点内容
轻应用缓存 发布:2025-05-18 00:31:02 浏览:251
鸟存储空气 发布:2025-05-18 00:20:24 浏览:201
linux刻录iso 发布:2025-05-18 00:16:15 浏览:663
php动态参数 发布:2025-05-18 00:12:05 浏览:425
安卓应用上传 发布:2025-05-18 00:11:57 浏览:803
数对的算法 发布:2025-05-18 00:11:02 浏览:382
linuxwhile 发布:2025-05-18 00:10:08 浏览:144
xpftp外网 发布:2025-05-17 23:58:11 浏览:386
如何评价一个服务器的性能 发布:2025-05-17 23:40:53 浏览:271
淘宝客适合什么服务器 发布:2025-05-17 23:39:26 浏览:614