目前有2个固定客户端
要做个服务端为中转站
把客户端1发送的信息通过服务端发送给客户端2
此过程不可逆转
要判断服务端接收到的是否是客户端1发过来的信息,然后再发送给客户端2。
目前已经实现了客户端1发送到服务端,
请问如何在服务端内做判断再发送给客户端2客户端1 public class Sco
{
string id;//按钮ID public string Id
{
get { return id; }
set { id = value; }
}
Socket socketIp; public Socket SocketIp
{
get { return socketIp; }
set { socketIp = value; }
}
}
private void Sending(IAsyncResult rec_socket)
{
Sco s = new Sco();
s = (Sco)rec_socket.AsyncState;
try
{
if (s.SocketIp.Connected)
{
byte[] msgBuff = Encoding.UTF8.GetBytes(s.Id);
s.SocketIp.Send(msgBuff);
}
else
{
Console.WriteLine("Error!", "Error!");
}
}
catch
{
Console.WriteLine("Error!", "Error!");
} }
private void button1_Click(object sender, EventArgs e)
{
Sco s = new Sco();
s.Id = ((Button)sender).Text;
IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.SocketIp = socket;
socket.BeginConnect(epServer, new AsyncCallback(Sending), s);
}
要做个服务端为中转站
把客户端1发送的信息通过服务端发送给客户端2
此过程不可逆转
要判断服务端接收到的是否是客户端1发过来的信息,然后再发送给客户端2。
目前已经实现了客户端1发送到服务端,
请问如何在服务端内做判断再发送给客户端2客户端1 public class Sco
{
string id;//按钮ID public string Id
{
get { return id; }
set { id = value; }
}
Socket socketIp; public Socket SocketIp
{
get { return socketIp; }
set { socketIp = value; }
}
}
private void Sending(IAsyncResult rec_socket)
{
Sco s = new Sco();
s = (Sco)rec_socket.AsyncState;
try
{
if (s.SocketIp.Connected)
{
byte[] msgBuff = Encoding.UTF8.GetBytes(s.Id);
s.SocketIp.Send(msgBuff);
}
else
{
Console.WriteLine("Error!", "Error!");
}
}
catch
{
Console.WriteLine("Error!", "Error!");
} }
private void button1_Click(object sender, EventArgs e)
{
Sco s = new Sco();
s.Id = ((Button)sender).Text;
IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.SocketIp = socket;
socket.BeginConnect(epServer, new AsyncCallback(Sending), s);
}
{
IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(epServer);
socket.Listen(10);
socket.BeginAccept(new AsyncCallback(RecVing), socket);
}
private delegate void server_invoke(string invokefun);
private void RecVing(IAsyncResult rec_socket)
{
string cmdstr = "";
Socket sc = (Socket)rec_socket.AsyncState;
Socket socket = sc.EndAccept(rec_socket);
byte[] bytes = new byte[1024];
int i = socket.Receive(bytes);
cmdstr = Encoding.UTF8.GetString(bytes, 0, i);
showstrs(cmdstr);
sc.BeginAccept(new AsyncCallback(RecVing), sc);
}
private void showstrs(string recv_strs)
{
if (recv_strs.Length != 0)
{
if (this.InvokeRequired)
{
server_invoke invoke = new server_invoke(showstrs);
this.Invoke(invoke, (object)recv_strs);
}
else
{
textBox1.Text = recv_strs;
Console.WriteLine(recv_strs);
}
}
}
{
IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(epServer);
socket.Listen(10);
socket.BeginAccept(new AsyncCallback(RecVing), socket);
}
private delegate void server_invoke(string invokefun);
private void RecVing(IAsyncResult rec_socket)
{
string cmdstr = "";
Socket sc = (Socket)rec_socket.AsyncState;
Socket socket = sc.EndAccept(rec_socket);
byte[] bytes = new byte[1024];
int i = socket.Receive(bytes);
cmdstr = Encoding.UTF8.GetString(bytes, 0, i);
showstrs(cmdstr);
sc.BeginAccept(new AsyncCallback(RecVing), sc);
}
private void showstrs(string recv_strs)
{
if (recv_strs.Length != 0)
{
if (this.InvokeRequired)
{
server_invoke invoke = new server_invoke(showstrs);
this.Invoke(invoke, (object)recv_strs);
}
else
{
textBox1.Text = recv_strs;
Console.WriteLine(recv_strs);
}
}
}
两个客户端先向服务端发个请求,然后服务器端记录两IP信息,这样两个客户端就能通信了。