Delphi中的TcpServer和TcpClient以及UdpSocket的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 08:30:14
我打算做一个简单的聊天程序,服务器端用的是多线程的,现在碰到一个问题想请教一下大家!
我是启动服务器的时候选定服务器的端口的,并且自动探测到本机IP,从而初始化TcpServer的LocalHost和LocalPort,在客户端连接时要填上服务器的IP和端口用来初始化TcpClient的RemoteHost和RemotePort。但是这样只能实现客户向服务器发信息!现在我想加个服务器向客户发信息的功能。
可是问题就出在这里了,就是该怎么设定TcpServer的RemotePort和TcpClient的LocalPort呢?因为一个TcpServer可以和多个TcpClient相连接的,那么该怎么设定每个TcpClient的LocalPort呢?
谢谢!

还有个关于UdpSocket的问题
怎么也调不出来
TUDPSocket属性设置为
.Active=true;
.Blockmode=bmNonBlock;
.LocalHost=127.0.0.1;
.LocalPort=12345;
.RemoteHost=127.0.0.1;
.RemotePort=12345.
发送数据:udpsocket1.SendStream(stream);
为什么OnReceive接收数据事件不能触发呢?
谢谢各位了!

在建立连接完成的事件里面把socket保存起来,S->C的时候找对应C的那个Socket就可以发送啊,至于怎么保存,建议是用TList+自定义一个结构体。

1 连接请求
使用了.NET类中的 System.Net.Sockets.TcpClient类,
TcpClient(string hostname,int port)
Hostname 是要控制的主机名称,当然你也可以用IP地址。
Port是端口。
// System.EventArgs包含事件数据类的基类
private void button7_Click(object sender, System.EventArgs e)
{
//记录操作,在richTextBox控件中增加操作信息
richTextBox1.AppendText("请求连接" +textBox1.Text +"\r");
int port =6678;
try
{
//初始化 TcpClient 类的新实例并连接到指定主机上的指定端口
client = new TcpClient(textBox1.Text,port);
}
catch
{
MessageBox.Show("服务器不在线!确定是否输入主机名称.");
richTextBox1.AppendText("服务器不在线!确定是否输入主机名称.");
}
}//private void buttion
2测试是否与被控制机连接上。程序的流程是发送控制码看控制端是否有反应,如果有返回则显示控制成功。
//提供网络访问的数据流
//private NetworkStream stream;
代码如下:
private void button8_Click(object sender, System.EventArgs e)
{
//