社区
网络及通讯开发
帖子详情
求BCB中UDPSocket的使用示例。
凌波微搏
2004-11-09 10:15:46
在Borland自己带的Example里面没有找到相关的示例。
我现在要不断的接收数据,然后进行处理。请各位给点建议。
...全文
1042
36
打赏
收藏
求BCB中UDPSocket的使用示例。
在Borland自己带的Example里面没有找到相关的示例。 我现在要不断的接收数据,然后进行处理。请各位给点建议。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
36 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
凌波微搏
2004-11-10
打赏
举报
回复
不知道 shadowstar(天作棋盘星作子,谁人敢下?) 今天来了没有,期待再次给我解答。
lidawen
2004-11-10
打赏
举报
回复
學習
凌波微搏
2004-11-10
打赏
举报
回复
谢谢了 谢谢 shadowstar(天作棋盘星作子,谁人敢下?) 此帖到此为止。我先研究,有问题再问你。
shadowstar
2004-11-10
打赏
举报
回复
如果你要等的话,再说我把主要的实现步骤都说了,你试着写一个就行了
shadowstar
2004-11-10
打赏
举报
回复
周六之前吧
凌波微搏
2004-11-10
打赏
举报
回复
shadowstar(天作棋盘星作子,谁人敢下?)
可否帮忙写一个简单的示例给我?
shadowstar
2004-11-10
打赏
举报
回复
那就不知道了
凌波微搏
2004-11-10
打赏
举报
回复
是的,我的也是,但是很多人说BCB6自带的版本有BUG,必须要更新到新版本,不然会有问题。
shadowstar
2004-11-10
打赏
举报
回复
什么版本呀?我的BCB6安装好了就有啊
凌波微搏
2004-11-10
打赏
举报
回复
Indy不是要配置么?我没有配置成功。
凌波微搏
2004-11-10
打赏
举报
回复
不知 shadowstar(天作棋盘星作子,谁人敢下?) 可否帮忙写一个Demo?我发了消息给你,是否可以直接向您请教?
shadowstar
2004-11-10
打赏
举报
回复
要安装么?
凌波微搏
2004-11-10
打赏
举报
回复
哦。。谢谢了。我也试图想使用Indy组件,但是Indy安装的时候没有成功。
shadowstar
2004-11-10
打赏
举报
回复
说过啦……
如果你想指定本地端口,需要从TUdpSocket继承一个新类(TMyUdpSocket),重载它的Open方法。
绑定到本地端口
其实用Indy的TIdUDPServer会更简单一些
凌波微搏
2004-11-10
打赏
举报
回复
感谢 shadowstar(天作棋盘星作子,谁人敢下?)
如果按照您上面说的,一个UDPSocket的话只能接收来自于一个发送端的数据了?我一开始以为UDPSocket只要监听本地端口,就会接收来自于任意发送端的数据,那么,如果是这样的话,我现在要同时接收来自于多个发送端的数据,该如何操作呢?
shadowstar
2004-11-10
打赏
举报
回复
我想问一下,这个线程岂不是一直在不停的接收,那么,这个接收线程所占用的系统资源就非常的多了。别的线程不久会出问题?如果我让它定时的每隔一段时间读一次,那么如果在两个间隔期间发过来的数据会不会丢掉?如果是的话,就必须谨慎的权衡一下间隔的时间了。
=============
不用担心线程的问题,每个Windows应用程序都在做着类似的事情……
shadowstar
2004-11-10
打赏
举报
回复
上面是初始化的代码,我想问一下,RemoteHost是不是指定了远程发送端的IP,RemotePort是不是指定了远程发送端的端口?这里只接收从RemoteHost指定的Ip和RemotePort指定的端口发送出来的数据?
按照你下面要重载的说法,难道本地的端口号是随机的?而不能指定?那么UdpSocket的LocalHost,和LocalPort又是做什么用的,难道不是用来指定本地地址和Port用的么?
而我上次问了一个相关的人士,他们告诉我RemoteHost和RemotePort是用在要发送UDP包的情况下,指定发送目的机器的IP和端口的。
不知道到底是哪种说法呢?
================
Active = true;
则与远端主机建立了一个连接,这时可以用ReceiveBuf,和SendBuf方法;
给Active赋值为true后,改变RemoteHost和RemotePort不能改变远端地址;
但可以使用ReceiveFrom, SendTo指定远端主机地址;
LocalHost和LocalPort对TUdpSocket来说是没有用的,本地端口是随机的;
kingzai
2004-11-09
打赏
举报
回复
Client端的,稍微修改就是Server端的。
#include "windows.h"
#include "stdio.h"
#include "winsock2.h"
#pragma link "WS2_32.LIB"
#define PORT 4096
void broadcast();
void to_point();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WSADATA wsadata;
if(WSAStartup(0x101,&wsadata) != 0) return 0;
broadcast();
to_point();
WSACleanup();
return 1;
}
void to_point()
{
sockaddr_in socket_out;
sockaddr_in socket_in;
sockaddr_in socket_from;
SOCKET s;
BOOL optval = true;
char buffer[2048];
int from_len;
WSAEVENT event_obj;
int size;
memset(&socket_in,0,sizeof(socket_in));
socket_in.sin_family = AF_INET;
socket_in.sin_addr.s_addr = INADDR_ANY;
socket_in.sin_port = htons(PORT);
socket_out.sin_family = AF_INET;
socket_out.sin_addr.s_addr = 0x580aa8c0;
s = socket(AF_INET,SOCK_DGRAM,0);
if(s == INVALID_SOCKET) return;
if(bind(s,(sockaddr FAR*)&socket_in,sizeof(socket_in)) != 0)
{
closesocket(s);
return;
}
if(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char FAR*)&optval,sizeof(optval)) == SOCKET_ERROR)
{
closesocket(s);
return;
}
from_len = sizeof(SOCKADDR);
event_obj = WSACreateEvent();
if(event_obj == WSA_INVALID_EVENT)
{
closesocket(s);
return;
}
if(WSAEventSelect(s,event_obj,FD_READ) == SOCKET_ERROR)
{
closesocket(s);
WSACloseEvent(event_obj);
return;
}
socket_out.sin_port = htons(PORT);
if(sendto(s,"Hello 192.168.10.88",20,0,(sockaddr FAR*)&socket_out,sizeof(socket_out)) == SOCKET_ERROR)
{
closesocket(s);
WSACloseEvent(event_obj);
return;
}
switch(WSAWaitForMultipleEvents(1,&event_obj,true,10,true))
{
default:
MessageBox(NULL,"Does not answer","Notice",0);
break;
case WSA_WAIT_EVENT_0:
size = recvfrom(s,(char FAR*)buffer,2048,0,(sockaddr FAR*)&socket_from,(int FAR*)&from_len);
if(size > 0)
{
MessageBox(NULL,buffer,"Answer",0);
}
}
closesocket(s);
WSACloseEvent(event_obj);
}
void broadcast()
{
sockaddr_in socket_out;
sockaddr_in socket_in;
sockaddr_in socket_from;
SOCKET s;
BOOL optval = true;
char buffer[2048];
int from_len;
WSAEVENT event_obj;
int size;
memset(&socket_in,0,sizeof(socket_in));
socket_in.sin_family = AF_INET;
socket_in.sin_addr.s_addr = INADDR_ANY;
socket_in.sin_port = htons(PORT);
socket_out.sin_family = AF_INET;
socket_out.sin_addr.s_addr = INADDR_BROADCAST;
s = socket(AF_INET,SOCK_DGRAM,0);
if(s == INVALID_SOCKET) return;
if(bind(s,(sockaddr FAR*)&socket_in,sizeof(socket_in)) != 0)
{
closesocket(s);
return;
}
if(setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR*)&optval,sizeof(optval)) == SOCKET_ERROR)
{
closesocket(s);
return;
}
from_len = sizeof(SOCKADDR);
event_obj = WSACreateEvent();
if(event_obj == WSA_INVALID_EVENT)
{
closesocket(s);
return;
}
if(WSAEventSelect(s,event_obj,FD_READ) == SOCKET_ERROR)
{
closesocket(s);
WSACloseEvent(event_obj);
return;
}
socket_out.sin_port = htons(PORT);
if(sendto(s,"Hello World",12,0,(sockaddr FAR*)&socket_out,sizeof(socket_out)) == SOCKET_ERROR)
{
closesocket(s);
WSACloseEvent(event_obj);
return;
}
switch(WSAWaitForMultipleEvents(1,&event_obj,true,10,true))
{
default:
MessageBox(NULL,"Does not answer","Notice",0);
break;
case WSA_WAIT_EVENT_0:
size = recvfrom(s,(char FAR*)buffer,2048,0,(sockaddr FAR*)&socket_from,(int FAR*)&from_len);
if(size > 0)
{
MessageBox(NULL,buffer,"Answer",0);
}
}
closesocket(s);
WSACloseEvent(event_obj);
}
凌波微搏
2004-11-09
打赏
举报
回复
还有,在你接收线程里面是如下的语句。
void __fastcall TUdpThread::Execute()
{
//---- Place thread code here ----
while (!Terminated)
{
Form1->UdpSocket1->ReceiveBuf(Buf, BufSize);
}
}
我想问一下,这个线程岂不是一直在不停的接收,那么,这个接收线程所占用的系统资源就非常的多了。别的线程不久会出问题?如果我让它定时的每隔一段时间读一次,那么如果在两个间隔期间发过来的数据会不会丢掉?如果是的话,就必须谨慎的权衡一下间隔的时间了。
凌波微搏
2004-11-09
打赏
举报
回复
RemoteHost = "192.168.0.1";
RemotePort = "123";
Active = true;
上面是初始化的代码,我想问一下,RemoteHost是不是指定了远程发送端的IP,RemotePort是不是指定了远程发送端的端口?这里只接收从RemoteHost指定的Ip和RemotePort指定的端口发送出来的数据?
按照你下面要重载的说法,难道本地的端口号是随机的?而不能指定?那么UdpSocket的LocalHost,和LocalPort又是做什么用的,难道不是用来指定本地地址和Port用的么?
而我上次问了一个相关的人士,他们告诉我RemoteHost和RemotePort是用在要发送UDP包的情况下,指定发送目的机器的IP和端口的。
不知道到底是哪种说法呢?
加载更多回复(16)
C#
使用
委托在
Socket
Udp
端口侦听线程内更新主窗口控件显示
c#开启线程侦听
Socket
UDP
端口,端口接收到网络读卡器的读卡数据后刷新UI界面显示接收数据,解析数据包信息并向读卡器发送显示文字、驱动读卡器播报语音、蜂鸣响声提示、开启继电器开关等操作。
raw
socket
的例子
raw
socket
的例子 一. 摘要 Raw
Socket
: 原始套接字 可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP,
UDP
... int sockRaw =
socket
(AF_INET, SOCK_RAW, IPPROTO_RAW); 这样我们就创建了一个 Raw
Socket
Sniffer: 嗅探器 关于嗅探器的原理我想大多数
详细讲解
Socket
服务器与多客户端的长链接通信(含Demo)
目录 简介
Socket
服务器实现 Sokcet客户端实现
Socket
服务器与多客户端的长连接的交互 1.简介 在讲解
Socket
通信之前,需要先了解一下常见的网络层级,如下图所示ISO将网络传输分为7层,其
中
Socket
通信处于传输层,
使用
的协议包括TCP和
UDP
,
UDP
是基于面向无链接的传输,TCP是基于链接的传输,关于TCP的工作原理,可参考《TCP/IP详解》笔记——TCP/IP基本...
raw
socket
的例子
一. 摘要 Raw
Socket
: 原始套接字 可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP,
UDP
... int sockRaw =
socket
(AF_INET, SOCK_RAW, IPPROTO_RAW); 这样我们就创建了一个 Raw
Socket
Sniffer: 嗅探器 关于嗅探器的原理我想大多数人可能都知...
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,316
社区成员
8,873
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章