下边的代码,只能接收一次,第二次的就不再接受了,不知道在哪里循环监听!~
private void InitUdp() {
ip = new IPEndPoint(IPAddress.Any, port);
client = new UdpClient(ip);
RequestState rs = new RequestState();
rs.ip = ip;
rs.client = client;
client.BeginReceive(new AsyncCallback(ReqCallback), rs);
} private void ReqCallback(IAsyncResult ar) {
RequestState rs = (RequestState)ar.AsyncState;
UdpClient client = rs.client;
IPEndPoint ip = rs.ip;
rs.buffer = client.EndReceive(ar, ref ip);
this.Invoke(new MessageDelegate(Message), rs);
} private delegate void MessageDelegate(RequestState rs);
private void Message(RequestState rs) {
this.tbContent.Text += Encoding.ASCII.GetString(rs.buffer)+"\n";
}
private void InitUdp() {
ip = new IPEndPoint(IPAddress.Any, port);
client = new UdpClient(ip);
RequestState rs = new RequestState();
rs.ip = ip;
rs.client = client;
client.BeginReceive(new AsyncCallback(ReqCallback), rs);
} private void ReqCallback(IAsyncResult ar) {
RequestState rs = (RequestState)ar.AsyncState;
UdpClient client = rs.client;
IPEndPoint ip = rs.ip;
rs.buffer = client.EndReceive(ar, ref ip);
this.Invoke(new MessageDelegate(Message), rs);
} private delegate void MessageDelegate(RequestState rs);
private void Message(RequestState rs) {
this.tbContent.Text += Encoding.ASCII.GetString(rs.buffer)+"\n";
}
解决方案 »
- xml加密解密,在线等。。。
- asp.net动态添加textbox控件,并计算文本框中的值!
- 在多IP的服务器上,如何知道用户是通过哪个IP进来的?
- winform怎么保存配置信息?
- 不通过对话框,怎么样在IE收藏夹里加内容呢?谢谢
- 求助高手DataGridView的问题 (操作无效,原因是它导致对 SetCurrentCellAddressCore 函数的可重入调用。)
- 为什么能在ListView中找到item,但删除该item时就出现“未将对象引用设置到对象的实例”异常
- 请教关于系统右键菜单执行
- 《300分;高分求解,C/S模式下的安全问题。---被反编译后)》
- 急救啊!!有问题请帮忙啊!!在线等待
- 我们单位局域网有1800台机器,每个部门有一个叫什么“域”,在网上邻居中只能看到本部门的机器。我想问,我在我的机器上的操作、发电子邮件、写东西等,网管或部门的计算机管理人员能否看到或截获盗走?
- 我写了个留言本,在连接到这个页面时报常数中有换行符的错误,请大家帮我分析下,谢谢了
while(true)
{
//你的接收代码
最好再加上Thread.Sleep(休眠时间) 防止CPU使用过高
}
{
//你的接收代码
最好再加上Thread.Sleep(休眠时间) 防止CPU使用过高
}就是要这样的代码,但是应该加在哪里呢?我试着加在BeginRecive或者EndRecive都不行!前一个报错说连接池啥的不够使,后一个报只能接收一次,望指点
ip = new IPEndPoint(IPAddress.Any, port);
client = new UdpClient(ip);
RequestState rs = new RequestState();
rs.ip = ip;
rs.client = client;
while(true){
client.BeginReceive(new AsyncCallback(ReqCallback), rs);
}
}
TCP才需要监听.
“由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。”我觉得还是有问题,while(true)分别试着加在BeginRecive或者EndRecive都不行
ip = new IPEndPoint(IPAddress.Any, port);
client = new UdpClient(ip);
while(true){
RequestState rs = new RequestState();
rs.ip = ip;
rs.client = client;
client.BeginReceive(new AsyncCallback(ReqCallback), rs);
}
}
报错
由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;namespace Chat {
public partial class ChatRoom : Form { private int port = 8000;
private UdpClient client;
private IPEndPoint ip;
public ChatRoom() {
InitializeComponent();
InitUdp();
} #region
private void ChatRoom_FormClosing(object sender, FormClosingEventArgs e) {
this.Dispose(true);
} #region Send Message
private void SendMessage(string str,IPEndPoint ip) {
client = new UdpClient();
client.Connect(ip);
byte[] sMsg = Encoding.ASCII.GetBytes(str);
try {
client.Send(sMsg, sMsg.Length);
}
catch (Exception exp) {
throw exp;
}
finally {
//this.tbContent.Text += str;
this.tbMessage.Text = "";
}
}
#endregion #region Recive
private void InitUdp() {
ip = new IPEndPoint(IPAddress.Any, port);
client = new UdpClient(ip);
while (true) {
RequestState rs = new RequestState();
rs.ip = ip;
rs.client = client;
client.BeginReceive(new AsyncCallback(ReqCallback), rs);
}
} private void ReqCallback(IAsyncResult ar) {
RequestState rs = (RequestState)ar.AsyncState;
UdpClient client = rs.client;
IPEndPoint ip = rs.ip;
rs.buffer = client.EndReceive(ar, ref ip);
this.Invoke(new MessageDelegate(Message), rs);
} private delegate void MessageDelegate(RequestState rs);
private void Message(RequestState rs) {
this.tbContent.Text += "From Server:"+Encoding.ASCII.GetString(rs.buffer)+"\n";
}
#endregion private void btnSend_Click(object sender, EventArgs e) {
ip = new IPEndPoint(IPAddress.Parse(tbIp.Text), 8000);
if (!string.IsNullOrEmpty(tbMessage.Text.Trim()))
if (!string.IsNullOrEmpty(tbIp.Text.Trim()))
SendMessage(tbMessage.Text, ip);
} #endregion private void btnEsc_Click(object sender, EventArgs e) {
this.Dispose(true);
} }
public class RequestState {
public RequestState() { }
public UdpClient client;
public IPEndPoint ip;
public byte[] buffer;
}
}
全部代码都在这里了,好心人帮忙看看