我做了个tcp接收和发送的小程序,接收程序总是接收一次,要close,不然就一直白屏,看不到接收的数据,程序如下,帮忙分析下:send:
Socket s;
System.Net.Sockets.TcpListener listener = new TcpListener(8005);
private void button1_Click(object sender, EventArgs e)
{
byte[] bytes = new byte[256];
int bytelen = 0;
string a = "aaa";
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("192.168.0.198"); //Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipRemoteEndPoint = new IPEndPoint(ipAddress, 8005); //Serializes the IPEndPoint.
SocketAddress socketAddress = ipRemoteEndPoint.Serialize();
IPAddress ipAddressL = IPAddress.Parse("192.168.0.198"); //Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddressL, 8100); try
{
s.Connect(ipRemoteEndPoint);
//s.Bind(s.LocalEndPoint);
//s.Bind((EndPoint)ipLocalEndPoint); bytes = System.Text.Encoding.Default.GetBytes(a);//string.Buffer.GetByte(a,0);
bytelen = bytes.Length;
s.Send(bytes,bytelen,SocketFlags.None);
//s.Close();
}catch(Exception e1){
MessageBox.Show(e1.ToString());
}
}recieve:
private void button2_Click(object sender, EventArgs e)
{
int cflag=5;
int recv;
byte[] bytes = new byte[256];
/*try {
listener.Start();
}
catch(Exception e1){
return;
}*/
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// IPAddress ipAddress = IPAddress.Parse(IPAddress.Any.ToString());
IPAddress ipAddress = IPAddress.Parse("192.168.0.198");
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8005);
// if(listener.res){}
//s.Connect(new IPEndPoint(IPAddress.Any, 0));
s.Bind(ipLocalEndPoint);
//IPAddress.Parse(CType(s.LocalEndPoint, IPEndPoint).Address.ToString());
//s.Connect(ipLocalEndPoint);
s.Listen(cflag);
//listener.AcceptSocket();
//while (true)
// {
Select();
Socket client = s.Accept();
/*IPAddress ipAddress1 = IPAddress.Parse("192.168.0.181"); //Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipRemoteEndPoint = new IPEndPoint(ipAddress1, 8005);
IPEndPoint clientip = (IPEndPoint)ipRemoteEndPoint;*/ string b = "Server Send...";
bytes = Encoding.ASCII.GetBytes(b); client.Send(bytes, b.Length, SocketFlags.None); //while(true){
byte[] data = new byte[256];
recv = client.Receive(data);
//s.Receive(bytes);
// if (recv == 0) { break; } richTextBox1.Text = System.Text.Encoding.Default.GetString(data); //bytes.ToString();
//client.Send(data,recv,SocketFlags.None);
// }
client.Close();
// }
s.Close();
//s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//IPAddress ipAddress = IPAddress.Parse("192.168.0.198");
//IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8001); //Serializes the IPEndPoint.
//SocketAddress socketAddress = ipLocalEndPoint.Serialize();
}
Socket s;
System.Net.Sockets.TcpListener listener = new TcpListener(8005);
private void button1_Click(object sender, EventArgs e)
{
byte[] bytes = new byte[256];
int bytelen = 0;
string a = "aaa";
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("192.168.0.198"); //Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipRemoteEndPoint = new IPEndPoint(ipAddress, 8005); //Serializes the IPEndPoint.
SocketAddress socketAddress = ipRemoteEndPoint.Serialize();
IPAddress ipAddressL = IPAddress.Parse("192.168.0.198"); //Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddressL, 8100); try
{
s.Connect(ipRemoteEndPoint);
//s.Bind(s.LocalEndPoint);
//s.Bind((EndPoint)ipLocalEndPoint); bytes = System.Text.Encoding.Default.GetBytes(a);//string.Buffer.GetByte(a,0);
bytelen = bytes.Length;
s.Send(bytes,bytelen,SocketFlags.None);
//s.Close();
}catch(Exception e1){
MessageBox.Show(e1.ToString());
}
}recieve:
private void button2_Click(object sender, EventArgs e)
{
int cflag=5;
int recv;
byte[] bytes = new byte[256];
/*try {
listener.Start();
}
catch(Exception e1){
return;
}*/
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// IPAddress ipAddress = IPAddress.Parse(IPAddress.Any.ToString());
IPAddress ipAddress = IPAddress.Parse("192.168.0.198");
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8005);
// if(listener.res){}
//s.Connect(new IPEndPoint(IPAddress.Any, 0));
s.Bind(ipLocalEndPoint);
//IPAddress.Parse(CType(s.LocalEndPoint, IPEndPoint).Address.ToString());
//s.Connect(ipLocalEndPoint);
s.Listen(cflag);
//listener.AcceptSocket();
//while (true)
// {
Select();
Socket client = s.Accept();
/*IPAddress ipAddress1 = IPAddress.Parse("192.168.0.181"); //Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipRemoteEndPoint = new IPEndPoint(ipAddress1, 8005);
IPEndPoint clientip = (IPEndPoint)ipRemoteEndPoint;*/ string b = "Server Send...";
bytes = Encoding.ASCII.GetBytes(b); client.Send(bytes, b.Length, SocketFlags.None); //while(true){
byte[] data = new byte[256];
recv = client.Receive(data);
//s.Receive(bytes);
// if (recv == 0) { break; } richTextBox1.Text = System.Text.Encoding.Default.GetString(data); //bytes.ToString();
//client.Send(data,recv,SocketFlags.None);
// }
client.Close();
// }
s.Close();
//s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//IPAddress ipAddress = IPAddress.Parse("192.168.0.198");
//IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8001); //Serializes the IPEndPoint.
//SocketAddress socketAddress = ipLocalEndPoint.Serialize();
}
//while(true){
byte[] data = new byte[256];
recv = client.Receive(data);
//s.Receive(bytes);
// if (recv == 0) { break; }你这接收只收了一次 得开启循环
接受时把缓存里字节流读出来,追加到空白字符串末尾,最后显示字符串,就可实现重复发送重复读取;