tcpclient怎么读 tcpdump怎么读

delphi 7 我通过TidTCP给下位机发送了命令。下位机会给我一个回复命令。我怎么接收这个回复?

// 发 123

tcpclient怎么读 tcpdump怎么读tcpclient怎么读 tcpdump怎么读


tcpclient怎么读 tcpdump怎么读


IdTCP1.Socket.WriteLn('123');

// 读 OK

Memo1.Lines.Add( IdTCP1.Socket.ReadLn );

C#套接字编程,用Tcp接收服务端的套接字,那怎么给它实现一个接收信息的回调函数啊?

你的程序里NetworkStream 放到while外 。服务只侦听。不需要主动去连接客户端。所以不用 BeginConnect。可以异步读BeginRead

byte[] buffer=new byte[1024];

stream.BeginRead(buffer, 0, BufferSize, callBack, null);

回调方法:

private void OnReadComplete(IAsyncResult ar)

{int bytesRead = 0;

try

{lock (streamTo)

{bytesRead = streamTo.EndRead(ar);

}if (bytesRead == 0) throw new Exception("读取到0字节");

string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);

//msg为接收到的信息

}// 再次调用BeginRead()

lock (streamTo)

{AsyncCallback callBack = new AsyncCallback(OnReadComplete);

stream.BeginRead(buffer, 0, BufferSize, callBack, null);

}}

catch (Exception ex)

{if (streamTo != null)

stream.Dise();

client.Close();

}}

C#读取邮件

写个读邮件的给你看看,至于读数量,研究下就出来了

protected void ReadEmail_Click(object sender, EventArgs e)

{try

{Tcp tcpclient = new Tcp(); // create an instance of Tcp

tcpclient.Connect("", 995); // HOST NAME POP SERVER and gmail uses port number 995 for POP

System.Net.Security.SslStream sslstream = new SslStream(tcpclient.GetStream()); // This is Secure Stream // opened the connection between client and POP

sslstream.AuthenticateAs(""); // authenticate as client

//bool flag = sslstream.IsAuthenticated; // check flag

System.IO.StreamWriter sw = new StreamWriter(sslstream); // Asssigned the writer to stream

System.IO.StreamReader reader = new StreamReader(sslstream); // Assigned reader to stream

sw.WriteLine("USER "); // refer POP rfc command, there very few around 6-9 command

sw.Flush(); // sent to server

sw.WriteLine("PASS your_gmail_password");

sw.Flush();

sw.WriteLine("RETR 1"); // this will retrive your first email

sw.Flush();

sw.WriteLine("Quit "); // close the connection

sw.Flush();

string str = string.Empty;

string strTemp = string.Empty;

while ((strTemp = reader.ReadLine()) != null)

{if (strTemp == ".") // find the . character in line

{break;

}if (strTemp.IndexOf("-ERR") != -1)

{break;

}str += strTemp;

}Response.Write(str);

Response.Write("
" + "Congratulation.. ....!!! Yoead your first gmail email ");

}catch (Exception ex)

{Response.Write(ex.Message);

}}

求助,C#Tcp的getstream 怎么读不到数据

没影响。 可以这样作 NetworkStream netStream=tcp.GetStream(); byte[] buffer =new byte[82];string msg="";int bytesRead;do { bytesRead = netStream.Read(buffer, 0, buffer.length); msg +=Encoding.Unicode.GetString(buffer,0, byte.

c#网络编程的问题,关于Tcp类。

问题3:实例化client后要开一个线程来读写数据的。

1:对,read放在while循环 当然这样cpu会挂,不过Read会让线程挂起 还需要一个推出线程的方法,就是while循环何时break 需要ManualResetEvent这个类来控制

2: Read是阻塞的,不发消息Read一直阻塞,Read一个byte[]是你自己指定 比如

byte[] buffer=new byte[512] Read的第三个参数size就是512

比如发来1025个字节 次Read512个 第二次Read512个 第三次Read1个 第四次Read会挂起了 接受了多少个字节? Read返回int 相加肯定是1025了

目的是缓存 如果Tcp发来1G的数据 client不用缓存读肯定挂了。

1、Read放在while里面,也可以异步接收,

2、你的第二个问题可以用“消息边界”来解决,不用异步的话,必须是你一条,我接收,再发,不然会阻塞

3、另开线程接收,建议你看一下MSDN,里面有一个关于线程的返回值的文章

要有一个单独的线程用于数据的读入

1不要;2while一直,byte.length;3多线程单socket

关于Delphi Indy 控件里IdTcp 的 疑问

procedure THandleThread.Execute;

begin

while not Terminated do

begin

if not FrmMain..Connected then

Terminate

else

try

FrmMain..ReadBuffer(CB, SizeOf (CB));

Synchronize(HandleInput);

except

end;

end;

end;

请楼主自己看看这个程序

FrmMain..ReadBuffer(CB, SizeOf (CB));

这段如果没有数据包的话会抛出异常。所以就不会执行Synchronize(HandleInput);

也就不会处理消息了。直接跳到EXCEPT里面去了。程序循环执行。不影响正常运行。

一般来说INDY的TCPCLIENT里面没有ONREAD。没办法接受消息。所以必须开一个线程来接收发来的信息。灰鸽子的工作原理就是这样的。

应该是停在 FrmMain..ReadBuffer(CB, SizeOf (CB)); 这里了。

Indy 用的是阻塞式。所以会等待。

mark 一下. 坐等高手来解

c#网络编程中tcpListener和tcp的用法

TCPListener类用于客户端连接请求。

TCP类用于提供本地主机和远程主机的连接信息。

两个类都位于 System.Net.Socckets命名空间下

方法 说明

AcceptSocket 从端口处接收一个连接并赋予它Socket对象

AcceptTcp 从端口处接收一个连接并赋予它TCP对象

Equals 判断两个TcpListener对象是否相等

GetType 获取当前实例的类型

Pending 确定是否有挂起的连接请求

Start 开始接听传入的连接请求

Stop 关闭

ToString 创建TcpListener对象的字符串表示


版权声明:本文内容由互联网用户自发贡献。如发现本站有涉嫌抄袭侵权/违法违规的内容, 836084111@qq.com 举报,一经查实,本站将立刻删除。

随便看看