Socket 连接 服务器端怎么一直监听客户端传过来的数据!客户端每次发送数据都要点击button1按钮,我想在点击一次后服务器端一直监听客户端传过来的数据!请大家帮忙客户端:private void btnUpLoad_Click(object sender, EventArgs e)
{
int port = 2000;
string host = "192.168.1.91"; try
{
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
statusBar1.Text = "Conneting......";
//Console.WriteLineConneting...");
c.Connect(ipe);//连接到服务器
string sendStr = this.txtBarCode.Text.Trim();
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
//Console.WriteLine("Send Message");
statusBar1.Text = "Send Message";
c.Send(bs, bs.Length, 0);//发送测试信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
//Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息
statusBar1.Text = "Client Get Message:"+recvStr;
c.Close(); }
catch (ArgumentNullException ex)
{
statusBar1.Text=ex.ToString();
}
catch (SocketException es)
{
statusBar1.Text=es.ToString();
}
}服务器端:
private void button1_Click(object sender, EventArgs e)
{
try
{
ChatServer = new IPEndPoint(IPAddress.Parse(ip), port); ChatSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类 ChatSocket.Bind(ChatServer);//绑定2000端口 ChatSocket.Listen(10);//开始监听 AcceptedSocket = ChatSocket.Accept();//为新建连接创建新的Socket。
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = AcceptedSocket.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); string sendStr = "Ok!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
AcceptedSocket.Send(bs, bs.Length, 0);//返回客户端成功信息 ReadFile(recvStr); ChatSocket.Close();
AcceptedSocket.Close(); }
catch (ArgumentNullException es)
{
MessageBox.Show(es.ToString());
}
catch (SocketException ex)
{
MessageBox.Show(ex.ToString());
}
}
{
int port = 2000;
string host = "192.168.1.91"; try
{
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
statusBar1.Text = "Conneting......";
//Console.WriteLineConneting...");
c.Connect(ipe);//连接到服务器
string sendStr = this.txtBarCode.Text.Trim();
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
//Console.WriteLine("Send Message");
statusBar1.Text = "Send Message";
c.Send(bs, bs.Length, 0);//发送测试信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
//Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息
statusBar1.Text = "Client Get Message:"+recvStr;
c.Close(); }
catch (ArgumentNullException ex)
{
statusBar1.Text=ex.ToString();
}
catch (SocketException es)
{
statusBar1.Text=es.ToString();
}
}服务器端:
private void button1_Click(object sender, EventArgs e)
{
try
{
ChatServer = new IPEndPoint(IPAddress.Parse(ip), port); ChatSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类 ChatSocket.Bind(ChatServer);//绑定2000端口 ChatSocket.Listen(10);//开始监听 AcceptedSocket = ChatSocket.Accept();//为新建连接创建新的Socket。
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = AcceptedSocket.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); string sendStr = "Ok!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
AcceptedSocket.Send(bs, bs.Length, 0);//返回客户端成功信息 ReadFile(recvStr); ChatSocket.Close();
AcceptedSocket.Close(); }
catch (ArgumentNullException es)
{
MessageBox.Show(es.ToString());
}
catch (SocketException ex)
{
MessageBox.Show(ex.ToString());
}
}
你这是同步的,如果用异步socket的话,BeginReceive里面注册了一个回调函数,在回调里面再次调用BeginReceive就可以一直监听了
//服务器端:
private void button1_Click(object sender, EventArgs e)
{
try
{
ChatServer = new IPEndPoint(IPAddress.Parse(ip), port); ChatSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类 ChatSocket.Bind(ChatServer);//绑定2000端口 ChatSocket.Listen(10);//开始监听 AcceptedSocket = ChatSocket.Accept();//为新建连接创建新的Socket。 while(true)
{
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = AcceptedSocket.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
if(bytes == 0)
break;
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); string sendStr = "Ok!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
AcceptedSocket.Send(bs, bs.Length, 0);//返回客户端成功信息 ReadFile(recvStr);
} ChatSocket.Close();
AcceptedSocket.Close(); }
catch (ArgumentNullException es)
{
MessageBox.Show(es.ToString());
}
catch (SocketException ex)
{
MessageBox.Show(ex.ToString());
}
}
我把程序改称你写的那样了 跟原来情况一样 我传完一次 在传第二次就不能监听了
break;
那你在服务器端注释调试试呢,
其实,我只是在你的服务器端加了循环,没有把监听socket关闭.如果返回数据为空就关闭监听了.你这个只是个同步顺序的socket程序,没有连续发送的功能,正常的应该是按2楼说的,异步操作才对的.
//客户端:
private void btnUpLoad_Click(object sender, EventArgs e)
{
int port = 2000;
string host = "192.168.1.91"; try
{
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
statusBar1.Text = "Conneting......";
//Console.WriteLineConneting...");
c.Connect(ipe);//连接到服务器
string sendStr = this.txtBarCode.Text.Trim();
while(true)
{
if(sendStr = "exit")
break;
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
//Console.WriteLine("Send Message");
statusBar1.Text = "Send Message";
c.Send(bs, bs.Length, 0);//发送测试信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
//Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息
statusBar1.Text = "Client Get Message:"+recvStr;
}
c.Close(); }
catch (ArgumentNullException ex)
{
statusBar1.Text=ex.ToString();
}
catch (SocketException es)
{
statusBar1.Text=es.ToString();
}
}
笔误...
AcceptedSocket.Close(); 不要关了....开着发数据收数据...
private Thread t1; private void button2_Click(object sender, EventArgs e)
{
this.button2.Enabled = false;
ts1 = new ThreadStart(AcceptThread);
t1 = new Thread(ts1);
t1.Name = "my thread";
t1.Start();
} public void AcceptThread()
{
int port = 2222;
string host = "127.0.0.1"; IPEndPoint ChatServer = new IPEndPoint(IPAddress.Parse(host), port); Socket ChatSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类 ChatSocket.Bind(ChatServer);//绑定2000端口 ChatSocket.Listen(10);//开始监听 string recvStr = "";
Socket AcceptedSocket; while (true)
{
try
{
AcceptedSocket = ChatSocket.Accept();//为新建连接创建新的Socket。
byte[] recvBytes = new byte[1024];
int bytes;
bytes = AcceptedSocket.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); string sendStr = "Ok!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
AcceptedSocket.Send(bs, bs.Length, 0);//返回客户端成功信息
//ReadFile(recvStr);
if (recvStr == "exit") break; }
catch (ArgumentNullException es)
{
MessageBox.Show(es.ToString());
}
catch (SocketException ex)
{
MessageBox.Show(ex.ToString());
}
} ChatSocket.Close();
AcceptedSocket.Close();
}
t1.Abort();
private void button2_Click(object sender, EventArgs e)
{
this.button2.Enabled = false;
ts1 = new ThreadStart(AcceptThread);
t1 = new Thread(ts1);
t1.IsBackground = true;
t1.Name = "my thread";
t1.Start();
}
没响应吗?
int porNum = int.Parse(txtport.Text);
Socket socket;
IPAddress ServerIp = GetServerIP();
IPEndPoint iep = new IPEndPoint(ServerIp, porNum);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//在此处添加代码以启动应用程序
TcpListener listener = new TcpListener(porNum);
listener.Start();
while (true)
{
//开始监听...
//Console.Write("正在监听2000端口...");
btnopen.Enabled = false;
//btnclose.Enabled = true;
TcpClient client = listener.AcceptTcpClient();
//→程序运行结束
//等待发送过来的信息...
NetworkStream ns = client.GetStream();