关于CSocket::Connect()

joke4k 2007-04-07 02:41:26
Connect()是不是在服务器端调用Accept()后才会返回TRUE?
小弟初学CSocket,服务器端Accept()好像调用成功了,可是客户端Connect()没有返回TRUE,很迷茫.....

PS:这个问题应该很简单吧,5分算了...
...全文
735 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuehan_1010 2010-05-30
  • 打赏
  • 举报
回复
有没有哪位兄弟愿意给个实例呢...
dipper 2007-04-07
  • 打赏
  • 举报
回复
accept后,accept函数将自动创建一个新的socket用来与client(g_hSockTK)连接会话,如创建失败,会返回SOCKET_ERROR,成功为0。client端的connect结果同上
而原socket继续保持侦听。

// 该函数堵塞等待客户的连接
g_hSockTK = accept(g_hSocket, NULL, NULL);
if (g_hSockTK == SOCKET_ERROR)
{
TRACE("Accept Error: %d\n",(error = WSAGetLastError()));
return 1;
}
joke4k 2007-04-07
  • 打赏
  • 举报
回复
有一点点懂了,虽然还不是很清楚...
djfu 2007-04-07
  • 打赏
  • 举报
回复
具体你可以看MSDN啊,上面也说了,客户端分为阻塞、非阻塞2种模式得到connect的结果。
也就是服务端accept以后,你的客户端会在阻塞模式下connect返回0,非阻塞模式下客户端可能会收到异步的链接成功时间或者select得到结果。
joke4k 2007-04-07
  • 打赏
  • 举报
回复
那他接受以后是不是要返回一个值来告诉客户端他接受了这个连接请求?
客户端收到这个之以后又是如何处理的?
djfu 2007-04-07
  • 打赏
  • 举报
回复
MSDN 2001/MSDN 2003.
accept server side: accept connect request from client sides.
joke4k 2007-04-07
  • 打赏
  • 举报
回复
MSDN上是这样写的
Return Value
Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. If this indicates an error code of WSAEWOULDBLOCK, and your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete.
为什么不一样...
那服务器端的Accept()是用来干什么的 ?

djfu 2007-04-07
  • 打赏
  • 举报
回复
分不是重要的。
connect(...)
Return Values
If no error occurs, connect returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.

On a blocking socket, the return value indicates success or failure of the connection attempt.

With a nonblocking socket, the connection attempt cannot be completed immediately. In this case, connect will return SOCKET_ERROR, and WSAGetLastError will return WSAEWOULDBLOCK.

如果阻塞模式,connect返回0表明成功,返回非0则connect失败;
如果非阻塞模式,connect是异步的,当前的返回值SOCKET_ERROR并不代表connect的结果,你需要在异步事件里面判断connect是否成功,或者用select来判断连接是否成功。
dipper 2007-04-07
  • 打赏
  • 举报
回复
connect() 返回值并非布尔型,当返回-1时,即SOCKET_ERROR,为连接失败。
具体查下msdn吧,记不清了。
一、实验目的 1.掌握通信规范的制定及实现。 2.练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。 二、实验内容和要求 1.进一步熟悉VC++6编程环境; 2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1.计算机及操作系统:PC机,Windows; 2.网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(closesocket)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(closesocket)。 CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。) (1)构造CSocket对象,如下例: CSocket ServerSocket; CSocket ClientSocket; (2)CSocket对象的Create函数用来创建Windows Socket,Create()函数会自行调用Bind()函数将此Socket绑定到指定的地址上面。如下例: ServerSocket.Create(823); //服务器端需要指定一个端口号,我们用823。 ClientSocket.Create(); //客户端不用指定端口号。 (3)现在已经创建完基本的Socket对象了,现在我们来启动它,对于服务器端,我们需要这个Socket不停的监听是否有来自于网络上的连接请求,如下例: ServerSocket.Listen(5);//参数5是表示我们的待处理Socket队列中最多能有几个Socket。 (4)对于客户端我们就要实行连接了,具体实现如下例: ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是端口号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(ReceiveSocket)来接收它,而此时服务器端还须建立一个新的CSocket对象,用它来和客户端进行交流。如下例: CSocket ReceiveSocket; ServerSocket.Accept(ReceiveSocket); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例: ServerSocket.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。ServerSocket.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。
<计算机网络实验> 基于TCP的网络聊天室的设计 -实验指导 一、实验目的 1.掌握通信规范的制定及实现。 2.练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。 二、实验内容和要求 1.进一步熟悉VC++6编程环境; 2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1.计算机及操作系统:PC机,Windows; 2.网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(closesocket)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(closesocket)。 CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。) (1)构造CSocket对象,如下例: CSocket ServerSocket; CSocket ClientSocket; (2)CSocket对象的Create函数用来创建Windows Socket,Create()函数会自行调用Bind()函数将此Socket绑定到指定的地址上面。如下例: ServerSocket.Create(823); //服务器端需要指定一个端口号,我们用823。 ClientSocket.Create(); //客户端不用指定端口号。 (3)现在已经创建完基本的Socket对象了,现在我们来启动它,对于服务器端,我们需要这个Socket不停的监听是否有来自于网络上的连接请求,如下例: ServerSocket.Listen(5);//参数5是表示我们的待处理Socket队列中最多能有几个Socket。 (4)对于客户端我们就要实行连接了,具体实现如下例: ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是端口号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(ReceiveSocket)来接收它,而此时服务器端还须建立一个新的CSocket对象,用它来和客户端进行交流。如下例: CSocket ReceiveSocket; ServerSocket.Accept(ReceiveSocket); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例: ServerSocket.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。ServerSocket.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。
Tinyftpd是用C语言实现的简单、快速、高效的Linux FTP服务器,只需简单的配置,就可快速的将主机变成高效的FTP服务器。模块简介TinyFTP分为 字符串工具模块、参数配置模块、socket模块、内部进程间通讯模块、系统调用工具模块。字符串工具模块:字符串模块主要用来处理开发过程中,各种对字符串的处理。模块在string.h 与 string.c参数配置模块:参数配置模块提供参数配置的功能。具体在parseconf.h 和 parseconf.csocket模块:用于socket通讯建立与数据传输。可见 commonsock.h commonsock.c内部进程间通讯模块:用于子进程 与 父进程间的通讯 与数据传输。privsock.h 和 privsock.c系统调用工具模块:主要是一些用到的系统调用的函数封装。可见sckutil.h sckutil.c安装编译cd build/ chmod  x bulid.sh sudo ./build.sh运行cd /bin sudo ./tinyftpd配置配置文件在当前目录的tinyftpd.conf配置参数说明tunable_pasv_enable是否开启被动模式tunable_port_enable是否开启主动模式tunable_max_clients最大连接数tunable_max_per_ip每IP最大连接数tunable_listen_portFTP服务器端口tunable_accept_timeoutaccept超时间tunable_connect_timeoutconnect超时间tunable_idle_session_timeout控制时间连接超时tunable_data_connection_timeout数据连接时间超时tunable_local_umask掩码tunable_upload_max_rate最大上传速度(byte/s)tunable_download_max_rate最大下载速度(byte/s)tunable_listen_addressFTP服务器IP地址 标签:Tinyftpd

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧