社区
网络及通讯开发
帖子详情
哪个高手会在BCB内使用socket API多线程来做传送文件的例子?
L·D·N
2005-10-11 04:55:47
哪个高手会在BCB内使用socket多线程来做传送文件的例子???可否告知我??
挺着急的,要做个软件,在LAN内做个类似BT的多点下载的程序,想到使用UDP协议来传送数据。
看了BCB的控件似乎效率很低,因为传送操作很频繁。怎么使用socket API来做呀?哪个高手可否指点一二?谢谢了!
...全文
983
14
打赏
收藏
哪个高手会在BCB内使用socket API多线程来做传送文件的例子?
哪个高手会在BCB内使用socket多线程来做传送文件的例子???可否告知我?? 挺着急的,要做个软件,在LAN内做个类似BT的多点下载的程序,想到使用UDP协议来传送数据。 看了BCB的控件似乎效率很低,因为传送操作很频繁。怎么使用socket API来做呀?哪个高手可否指点一二?谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yz20050510
2006-03-21
打赏
举报
回复
我也想要,帮你顶!!!
wenyongjie
2006-03-21
打赏
举报
回复
up
nieshigui
2005-10-18
打赏
举报
回复
顶上
godoli
2005-10-18
打赏
举报
回复
#define WM_SOCKETEVENT WM_USER + 1
用API函数
WSAAsyncSelect(Sock, Hwnd, WM_SOCKETEVENT, FD_READ | FD_WRITE | FD_CLOSE);
就能实现这种异步模型。
看一下《WINDOWS网络编程技术》这本书的第8、9章,网上搜一下就有。
L·D·N
2005-10-17
打赏
举报
回复
。。。。。。。。。。。。。自己再顶吧
我不懂电脑
2005-10-17
打赏
举报
回复
你可以参考一下unix的例子,很多的。
shadowstar
2005-10-15
打赏
举报
回复
不要讲什么VC,BCB,WINAPI是在WINDOWS下开发都可以用的。
L·D·N
2005-10-15
打赏
举报
回复
基础不是很好,但我要用的是UDP协议。
我创建了一个线程函数,在线程函数内接收数据。使用阻塞模式。
接收数据好象是正常的,具体的频繁接收数据我没有测试,问题在于线程内recvfrom阻塞了。
当退出程序的时候,抛出异常,无法正常关闭程序。不知道如何解决。
后来想到使用非阻塞模式,可是非阻塞模式应该是调用recvfrom 之后函数会立即返回,这样以来,
我接收数据使用的是一个循环,那么不是疯狂的循环下去?CPU资源不是都给占完了?我用的是BCB来写程序的。我知道用VC的话可以使用WSASelect来设置发送消息来通知程序收到数据。问题是BCB应该怎么做?程序是用来发送文件接收文件用的,发送接收操作肯定很频繁,这样做可否胜任?
望高手指点一二。谢谢!!
FengSC
2005-10-14
打赏
举报
回复
先必须自己研究研究,有一定基础以后再来提具体问题
RobertSky
2005-10-14
打赏
举报
回复
服务器:
void __fastcall TForm_Main::FormCreate(TObject *Sender) //初始化网络
{
WORD wVersionRequested;
WSADATA wsaData;
PHOSTENT hostinfo;
sockaddr_in my_sockaddr;
wVersionRequested=MAKEWORD(2,0);
if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
Application->MessageBoxA("初始化SOCKET失败!","提示",MB_ICONINFORMATION|MB_OK);
}
m_serversocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(m_serversocket==INVALID_SOCKET)
{
Application->MessageBoxA("SOCKET创建失败!","提示",MB_ICONINFORMATION|MB_OK);
closesocket(m_serversocket);
}
my_sockaddr.sin_family=AF_INET;
my_sockaddr.sin_port=4545;
my_sockaddr.sin_addr.S_un.S_addr=INADDR_ANY;
if(bind(m_serversocket,(const sockaddr*)&my_sockaddr,sizeof(my_sockaddr))==SOCKET_ERROR)
{
Application->MessageBoxA("SOCKET绑定失败!","提示",MB_ICONINFORMATION|MB_OK);
}
DWORD dwthread;
NetThread=CreateThread(NULL,0,listenthread,(void*)m_serversocket,0,&dwthread);
}
监听线程函数:
DWORD WINAPI listenthread(void* p)
{
SOCKET m_socket=(SOCKET) p;
if(listen(m_socket,30)==SOCKET_ERROR)
{
Application->MessageBoxA("SOCKET监听失败!","提示",MB_ICONINFORMATION|MB_OK);
closesocket(m_socket);
return 0;
}
while(!Form_Main->Exited)
{
SOCKET s;
s=accept(m_socket,NULL,NULL);
DWORD dwthread;
CreateThread(NULL,0,StartNet,(void*)s,0,&dwthread);
}
closesocket(m_socket);
return 1;
}
文件传输实现:
DWORD WINAPI StartNet(void* p)
{
SOCKET s_client=(SOCKET)p;
char s_buffer[100];
AnsiString s_tmp;
memset(s_buffer,'\0',100);
sprintf(s_buffer,"%s","连接确认");
send(s_client,s_buffer,8,0);
memset(s_buffer,'\0',100);
if(recv(s_client,s_buffer,100,0)==SOCKET_ERROR)
{
closesocket(s_client);
return 0;
}
s_tmp=s_buffer;
if(s_tmp.SubString(1,12)=="请求远程下载")
{
if(!FileExists(s_tmp.SubString(13,23)))
{
send(s_client,"无文件",6,0);
closesocket(s_client);
return 0;
}
else
{
int f_handle=open(s_tmp.SubString(13,23).c_str(),O_RDONLY|O_BINARY,S_IREAD);
if(f_handle==-1)
{
send(s_client,"无文件",6,0);
_close(f_handle);
closesocket(s_client);
return 0;
}
else
{
unsigned long d_fsize;
d_fsize=filelength(f_handle);
DWORD nSize=1024;
PBYTE pBuf=new BYTE [nSize];
DWORD nBlock=d_fsize/nSize;
DWORD nRemain=d_fsize%nSize;
lseek(f_handle,0,SEEK_SET);
AnsiString s_tmp_filelength;
s_tmp_filelength.sprintf("%020d%020d",d_fsize,nRemain);
send(s_client,"有文件",6,0);
send(s_client,s_tmp_filelength.c_str(),40,0);
// send(s_client,"文件尾",6,0);
unsigned long client_i;
for(unsigned long i=0;i<nBlock;i++)
{
if(read(f_handle,(void*)pBuf,1024)==-1)
{
send(s_client,"服务器文件错误",100,0);
_close(f_handle);
closesocket(s_client);
return 0;
}
else
{
send(s_client,pBuf,1024,0);
}
do
{
memset(s_buffer,'\0',100);
if(recv(s_client,s_buffer,20,0)==SOCKET_ERROR)
{
send(s_client,"服务器文件错误",100,0);
_close(f_handle);
closesocket(s_client);
return 0;
}
s_tmp_filelength=s_buffer;
client_i=StrToInt(s_tmp_filelength);
}
while((i+1!=client_i)&&client_i<nBlock);
}
send(s_client,"文件尾",6,0);
if(read(f_handle,(void*)pBuf,nRemain)==-1)
{
send(s_client,"服务器文件错误",100,0);
_close(f_handle);
closesocket(s_client);
return 0;
}
else
{
send(s_client,pBuf,nRemain,0);
_close(f_handle);
closesocket(s_client);
return 0;
}
}
}
}
else
{
closesocket(s_client);
return 0;
}
}
太多了不想贴了,麻烦~
wohow
2005-10-13
打赏
举报
回复
调用socket,bind,sendto,recvfrom等几个函数就行了
L·D·N
2005-10-13
打赏
举报
回复
这里高手很多,可是没有人愿意教我们,哪怕是不完整的提示都没有~
哎~!!!!!!!!!。
学个东西还真难。。。。。。。。。。。。。。。。。。。。。。。。。。
通宵的找答案仍然找不到,我不是死找,而是相关的都找了,还是无法做出来,来到这里求助,几天了也没有人说个具体的方法。。。。
wsb01071054
2005-10-12
打赏
举报
回复
我也不会啊,我也是在这里找答案的,不好意思啊!
sxzqlzx
2005-10-11
打赏
举报
回复
用组件多好,如Nmudp
BCB
高手
进阶 (八)TServer
Socket
和TClient
Socket
应用技巧
BCB
高手
进阶(八)TServer
Socket
和TClient
Socket
应用技巧:nxyc_twz@163.com 在网络编程中,Win
Socket
API
编程是最基本,也是最繁锁的部分。但是,如果你是采用C++Builder 5 作为编程平台,事情就变得简单的多了!通过我的介绍,相信你一定能快速掌握设计基于C/S体系的方法与技巧。 在
BCB
中,TServerSocke
BCB
6 UDP套接字
API
开发实战指南
用户数据报协议(UDP)是网络通信协议的一种,它与TCP(传输控制协议)共同成为互联网中常见的两种传输层协议。UDP提供了一种无连接的、不可靠的数据报服务,适合于那些对延迟较为敏感但可以容忍丢包的应用场景。在
BCB
6中,你可以利用如下开发工具和库来进行UDP套接字编程:集成开发环境(IDE):利用
BCB
6的IDE进行代码编写、编译、调试。Winsock库(ws2_32.lib):提供网络编程相关的
API
,例如
socket
bindsendtorecvfrom等。
C++
多线程
异步通信
Windows
Socket
s 2新增的函数列在下表中: WSAAccept() accept()函数的扩展版本,它支持条件接收和套接口分组。 WSACloseEvent() 释放一个事件对象。 WSAConnect() connect()函数的扩展版本,它支持连接数据交换和QOS规范。 WSACreateEvent() 创建一个事件对象。 WSADuplicate
Socket
()
accept“所有
文件
(*.*)”怎么去掉_前端
多线程
大
文件
下载实践,提速10倍
背景 没错,你没有看错,是前端
多线程
,而不是Node。这一次的探索起源于最近开发中,有遇到视频流相关的开发需求发现了一个特殊的状态码,他的名字叫
做
206~为了防止本文的枯燥,先上效果图镇文。(以一张3.7M 大小的图片为例)。动画效果对比(单线程-左 VS 10个线程-右)时间对比(单线程 VS 10个线程)看到这里是不是有点心动,那么请你继续听我道来,那我们先抓个包来看看整个过程是怎...
60个
BCB
(C++Build)初学者 应用实例
1.怎样在C++Builder中创建
使用
DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.C++Builder如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder 3制作屏幕保护程序 7.TCP/IP头格式 8.UDP 9.判断windows的Desktop及其它目录 10用
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章