这个是发送 用户名 和 要转发的消息 给服务器
net.Write(Encoding.Unicode.GetBytes(textBox6.Text), 0, Encoding.Unicode.GetBytes(textBox6.Text).Length);//net.Write(Encoding.Unicode.GetBytes(textBox1.Text), 0, Encoding.Unicode.GetBytes(textBox1.Text).Length);//byte[] qq = new byte[222];
net.Read(qq, 0, qq.Length);
string conresult = Encoding.Unicode.GetString(qq);
richTextBox1.AppendText(conresult);
下面是服务器转发
Socket clientSkt = hashtable[obj] as Socket;
while (true)
{
try
{
byte[] _cmdBuff = new byte[128];
clientSkt.Receive(_cmdBuff);
string _receiver = Encoding.Unicode.GetString(_cmdBuff).TrimEnd('\0');
byte[] _packetBuff = new byte[_maxPacket];
clientSkt.Receive(_packetBuff);
if (hashtable.ContainsKey(_receiver))
{
//通过转发表查找接收方的套接字
Socket receiverSkt = hashtable[_receiver] as Socket;
receiverSkt.Send(_packetBuff);
}
else
{
string sysMessage = string.Format("[系统消息]您刚才的内容没有发送成功。\r\n可能原因:用户 {0} 已离线或者网络阻塞。\r\n\r\n", _receiver);
clientSkt.Send(Encoding.Unicode.GetBytes(sysMessage));
}
}
catch(Exception e)
{}
}socket服务器编程
net.Write(Encoding.Unicode.GetBytes(textBox6.Text), 0, Encoding.Unicode.GetBytes(textBox6.Text).Length);//net.Write(Encoding.Unicode.GetBytes(textBox1.Text), 0, Encoding.Unicode.GetBytes(textBox1.Text).Length);//byte[] qq = new byte[222];
net.Read(qq, 0, qq.Length);
string conresult = Encoding.Unicode.GetString(qq);
richTextBox1.AppendText(conresult);
下面是服务器转发
Socket clientSkt = hashtable[obj] as Socket;
while (true)
{
try
{
byte[] _cmdBuff = new byte[128];
clientSkt.Receive(_cmdBuff);
string _receiver = Encoding.Unicode.GetString(_cmdBuff).TrimEnd('\0');
byte[] _packetBuff = new byte[_maxPacket];
clientSkt.Receive(_packetBuff);
if (hashtable.ContainsKey(_receiver))
{
//通过转发表查找接收方的套接字
Socket receiverSkt = hashtable[_receiver] as Socket;
receiverSkt.Send(_packetBuff);
}
else
{
string sysMessage = string.Format("[系统消息]您刚才的内容没有发送成功。\r\n可能原因:用户 {0} 已离线或者网络阻塞。\r\n\r\n", _receiver);
clientSkt.Send(Encoding.Unicode.GetBytes(sysMessage));
}
}
catch(Exception e)
{}
}socket服务器编程
serverThread.Start(); private void ReceiveAccept()
{
while (true)
{
//xxxxxxxxxxxxx
}
}
Receive 这个方法是个堵塞方法,如果接收不到会一直接收,直到传入的连接尝试排入队列。可能就堵在这里了。
多客户端可以在服务端这建个
private Socket[] clientSocket;//为客户端建立的SOCKET连接。
一个客户端对应一个socket