社区
网络编程
帖子详情
简单问题,csocket的send函数
macrogu
2003-10-21 10:44:14
csocket的send函数buffer大小有没有限制,我一次发送一个接近1M的CString字符串也没有问题,但好像听说buffer大小不能超过ip包的最大值,是不是应该分成几k分几次发送???或者是因为csocket是阻塞的,不管buffer多大,他都会直到发送完成后返回。
...全文
60
4
打赏
收藏
简单问题,csocket的send函数
csocket的send函数buffer大小有没有限制,我一次发送一个接近1M的CString字符串也没有问题,但好像听说buffer大小不能超过ip包的最大值,是不是应该分成几k分几次发送???或者是因为csocket是阻塞的,不管buffer多大,他都会直到发送完成后返回。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CounterHack
2003-10-22
打赏
举报
回复
对于send(),系统可以给你拆包,但Recv()就只能你自己组装了.
while((int nCount = Recv(buf,len)) < 0)
{
//处理数据。
}
fbmsf
2003-10-21
打赏
举报
回复
分割你的buffer,作成 ip包是由你的下层程序来实现的。你是不用管的,但是最好不要一次发的太多。一般send可以发一次就成功,关键是recv,它不是执行一次就按你要得到的字节数来给你的。比如你要recv,1024字节,但它就可以只返回726字节 所以,recv有时要递归来接收,直到得到你想要的字节数为止。
windows_editor
2003-10-21
打赏
举报
回复
你应该对send函数进行改进 以保证每次都发送完全
int xSend(SOCKET sock, void *buf, int len)
{
int byte_left, byte_send, byte_sum;
u_char *p;
byte_left = len;
p = buf;
byte_sum = 0;
while(byte_left > 0) {
byte_send = send(sock, p, byte_left, 0);
if(byte_send < 0) {
perror("writing socket");
return(-1);
}
else if(byte_send == 0 ){
break;
}
byte_sum += byte_send;
byte_left = byte_left - byte_send;
p = p + byte_send;
}
if(byte_sum != len){
return -1;
}
else{
return 0;
}
}
bbyf
2003-10-21
打赏
举报
回复
关注!
VC++网络通讯课程设计
利用MFC为开发工具在多个I/O端点之间实现多对多的通信。通过MFC中CAsync
Socket
类把复杂的WinSock API
函数
封装到类里,MFC给出了C
Socket
类,这个类是由CAsync
Socket
类继承下来的,它提供了比CAsync
Socket
更高层的WinSock API接口。C
Socket
对象提供阻塞模式,阻塞
函数
(如Receive()、
Send
()、ReceiveFrom()、
Send
To() 和Accept())直到操作完成后才返回控制权。
基于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)。 五、关闭套接字(close
socket
)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(
send
/receive)。 四、关闭套接字(close
socket
)。 C
Socket
的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows
Socket
选项,其中Server
Socket
是服务器端用到的,Client
Socket
是客户端用的。) (1)构造C
Socket
对象,如下例: C
Socket
Server
Socket
; C
Socket
Client
Socket
; (2)C
Socket
对象的Create
函数
用来创建Windows
Socket
,Create()
函数
会自行调用Bind()
函数
将此
Socket
绑定到指定的地址上面。如下例: Server
Socket
.Create(823); //服务器端需要指定一个端口号,我们用823。 Client
Socket
.Create(); //客户端不用指定端口号。 (3)现在已经创建完基本的
Socket
对象了,现在我们来启动它,对于服务器端,我们需要这个
Socket
不停的监听是否有来自于网络上的连接请求,如下例: Server
Socket
.Listen(5);//参数5是表示我们的待处理
Socket
队列中最多能有几个
Socket
。 (4)对于客户端我们就要实行连接了,具体实现如下例: Client
Socket
.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是端口号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(Receive
Socket
)来接收它,而此时服务器端还须建立一个新的C
Socket
对象,用它来和客户端进行交流。如下例: C
Socket
Receive
Socket
; Server
Socket
.Accept(Receive
Socket
); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的
函数
。如下例: Server
Socket
.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。Server
Socket
.
Send
(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。
基于TCP的网络聊天室的设计
<计算机网络实验> 基于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)。 五、关闭套接字(close
socket
)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(
send
/receive)。 四、关闭套接字(close
socket
)。 C
Socket
的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows
Socket
选项,其中Server
Socket
是服务器端用到的,Client
Socket
是客户端用的。) (1)构造C
Socket
对象,如下例: C
Socket
Server
Socket
; C
Socket
Client
Socket
; (2)C
Socket
对象的Create
函数
用来创建Windows
Socket
,Create()
函数
会自行调用Bind()
函数
将此
Socket
绑定到指定的地址上面。如下例: Server
Socket
.Create(823); //服务器端需要指定一个端口号,我们用823。 Client
Socket
.Create(); //客户端不用指定端口号。 (3)现在已经创建完基本的
Socket
对象了,现在我们来启动它,对于服务器端,我们需要这个
Socket
不停的监听是否有来自于网络上的连接请求,如下例: Server
Socket
.Listen(5);//参数5是表示我们的待处理
Socket
队列中最多能有几个
Socket
。 (4)对于客户端我们就要实行连接了,具体实现如下例: Client
Socket
.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是端口号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(Receive
Socket
)来接收它,而此时服务器端还须建立一个新的C
Socket
对象,用它来和客户端进行交流。如下例: C
Socket
Receive
Socket
; Server
Socket
.Accept(Receive
Socket
); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的
函数
。如下例: Server
Socket
.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。Server
Socket
.
Send
(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。
MFC网络编程之自制浏览器
网络编程,当然要用到Windows
Socket
(套接字)技术。
Socket
相关的操作由一系列API
函数
来完成,比如
socket
、bind、listen、connect、accept、
send
、
send
to、recv、recvfrom等。调用这些API
函数
有一定的先后次序,有些
函数
的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsync
Socket
和C
Socket
,极大地方便了
Socket
功能的使用。 CAsync
Socket
类在较低层次上封装了Windows
Socket
API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows
Socket
API默认情况下工作在阻塞模式,不方便直接在消息驱动的Windows程序上使用)。C
Socket
类从CAsync
Socket
类派生,进一步简化了
Socket
功能的应用。不过很遗憾,正因为这两个类都内建了一个窗口,它们并不是线程安全的(thread-safe);如果要在多线程环境下应用
Socket
功能,建议自行封装
Socket
API
函数
。 基于TCP的
socket
编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到一个本地地址和端口号上(bind) 3、将套接字设为监听模式,准备接受客户请求(listen) 4、等待客户请求,请求到来时接受请求,建立链接,并返回 一个新的基于此次通信的套接字(accept) 5、用返回的套接字和客户端进行通信(
send
、recv) 6、返回,等待另一客户请求 7、关闭套接字 基于TCP的
socket
编程的客户端程序流程如下: 1、创建套接字 2、向服务器端发送请求(connect) 3、和服务器端进行通信(
send
、recv) 4、关闭套接字 基于UDP的
socket
编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到本地地址和端口号上(bind) 3、等待接收数据(recvfrom) 4、关闭套接字 基于UDP的
socket
编程的客户端程序流程如下: 1、创建套接字 2、和服务器端进行通信(
send
to) 3、关闭套接字 异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。 阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()
函数
读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个
函数
调用上,直到读到一些数据,此
函数
调用才返回;而非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()
函数
读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此
函数
调用上。在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。 对于这些概念,初学者的理解也许只能似是而非,我将用一个最
简单
的例子说明异步非阻塞
Socket
的基本原理和工作机制。目的是让初学者不仅对
Socket
异步非阻塞的概念有个非常透彻的理解,而且也给他们提供一个用
Socket
开发网络通信应用程序的快速入门方法。操作系统是Windows 98(或NT4.0),开发工具是Visual C++6.0。 MFC提供了一个异步类CAsync
Socket
,它封装了异步、非阻塞
Socket
的基本功能,用它做常用的网络通信软件很方便。但它屏蔽了
Socket
的异步、非阻塞等概念,开发人员无需了解异步、非阻塞
Socket
的原理和工作机制。因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非阻塞
Socket
编程机制的理解。
C++
socket
编程
c++的
socket
编程基础案例。
Socket
相关的操作由一系列API
函数
来完成,比如
socket
、bind、listen、connect、accept、
send
、
send
to、recv、recvfrom等。调用这些API
函数
有一定的先后次序,有些
函数
的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsync
Socket
和C
Socket
,极大地方便了
Socket
功能的使用
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章