当服务器端同时处理多个连接时,服务器端就创建多个socket,我用socket.handle标记着多个句柄,并保存到一个句柄数组中,请问怎样通过保存的句柄,查询其对应的socket,并利用socket发送反馈信息到客户端?还是可以直接利用句柄可以发送信息?
服务器部分代码如下:
clientSocket = stServer.Accept();
Socket childClient = clientSocket;
while (keepalive)
{
try
{
Byte[] byBuff = new Byt[8192];
childClient.Receive(byBuff, byBuff.Length, 0);
string strBuff = Encoding.Default.GetString(byBuff).TrimEnd('\0');
socketFlag = childClient.Handle.ToString(); //得到此SOCKET的句柄,用做SOCKET标识
endPoint = childClient.RemoteEndPoint; //客户端IP+端口f (strBuff.Length >= 3)
{
string sFg = strBuff.Substring(0, 3); if (sFg == "LOD") //客户端上线:客户端上线时要发送LOD标识
{
HandleArray.Add(socketFlag); //加入SOCKET句柄到数组列表中
Socket_Connection(0, endPoint,socketFlag); //调用上线处理函数
}
private void Socket_Connection(int flag, EndPoint ep, string hd)
{
IPEndPoint IPpoint = ((IPEndPoint)ep); string hostIP = IPpoint.Address.ToString(); //IP地址
string hostPort = IPpoint.Port.ToString(); //端口号 IPHostEntry myHost = Dns.GetHostByAddress(hostIP);
string hostName = myHost.HostName; //主机名 int index = lstViewServer.Items.Count + 1;
ListViewItem lstItem = new ListViewItem(index.ToString()); if (flag == 0) //上线
{
lstItem.SubItems.Add(hostName);
lstItem.SubItems.Add(hostIP);
lstItem.SubItems.Add(hd);
lstItem.SubItems.Add(hostPort);
lstItem.SubItems.Add(DateTime.Now.ToString());
lstAdd(lstItem);
}在此基础上,怎样通过操作socket句柄,增加一个服务器发送信息的功能?本人socket刚入门,请指教
服务器部分代码如下:
clientSocket = stServer.Accept();
Socket childClient = clientSocket;
while (keepalive)
{
try
{
Byte[] byBuff = new Byt[8192];
childClient.Receive(byBuff, byBuff.Length, 0);
string strBuff = Encoding.Default.GetString(byBuff).TrimEnd('\0');
socketFlag = childClient.Handle.ToString(); //得到此SOCKET的句柄,用做SOCKET标识
endPoint = childClient.RemoteEndPoint; //客户端IP+端口f (strBuff.Length >= 3)
{
string sFg = strBuff.Substring(0, 3); if (sFg == "LOD") //客户端上线:客户端上线时要发送LOD标识
{
HandleArray.Add(socketFlag); //加入SOCKET句柄到数组列表中
Socket_Connection(0, endPoint,socketFlag); //调用上线处理函数
}
private void Socket_Connection(int flag, EndPoint ep, string hd)
{
IPEndPoint IPpoint = ((IPEndPoint)ep); string hostIP = IPpoint.Address.ToString(); //IP地址
string hostPort = IPpoint.Port.ToString(); //端口号 IPHostEntry myHost = Dns.GetHostByAddress(hostIP);
string hostName = myHost.HostName; //主机名 int index = lstViewServer.Items.Count + 1;
ListViewItem lstItem = new ListViewItem(index.ToString()); if (flag == 0) //上线
{
lstItem.SubItems.Add(hostName);
lstItem.SubItems.Add(hostIP);
lstItem.SubItems.Add(hd);
lstItem.SubItems.Add(hostPort);
lstItem.SubItems.Add(DateTime.Now.ToString());
lstAdd(lstItem);
}在此基础上,怎样通过操作socket句柄,增加一个服务器发送信息的功能?本人socket刚入门,请指教
解决方案 »
- 请问多个泛型List做属性,如何进行读取操作啊,谢谢了
- 我用C#做了个登录界面,怎样把它和sql数据库连接起来?
- 急!!c#图片保存到Acces
- c#中使用CreateDIBSection造成内存泄露的问题。
- 字符串截取问题80分送上
- 〓〓〓〓〓思归,速马等高人请进,解决了这个问题,散尽我所有的可用分,1100分,快疯了〓〓〓〓〓
- ACCESS 查詢結果只返回50條的SQL語句[想學的 會的進][邊城浪浪子請進]
- C#应程序第一次启动拍照功能可行,关闭重新打开程序就无法启动视频设备
- vs.net2003新建项目出错
- Process.GetProcesses(tmpMachineName)问题?
- 如何判断 是鼠标 还是 触摸屏 移动鼠标指针的
- 请教C#各位高手
private static List<Socket> li = new List<Socket>(); 这是C#的应该这样写
我在程序中已经把创建的socket就加到li中,关键是我要用其中指定的socket发数据。比如我知道这个socket的IP和端口,我怎么选中这个socket呢。
foreach (Socket clients in li)
{
if (clients.Handle.ToString() ==textBox3.Text)
{
byte[] sendmsg = Encoding.Unicode.GetBytes(this.textBox3.Text + "\n");
clients.Send(sendmsg);
}
}
搞定