【发布时间】:2015-06-13 16:37:28
【问题描述】:
我是 C# 套接字编程的新手。我正在尝试在两台计算机之间建立一个聊天服务器,但我无法这样做,因为我无法启动我的 Socket .....我给了服务器程序我的 IP 地址,但给了我一个例外......“请求的地址是在其上下文中无效” ...这是代码:
IPAddress hostIPAddress = IPAddress.Parse("178.189.27.85");
TcpListener serverSocket = new TcpListener(hostIPAddress, 8888);
int requestCount = 0;
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
Console.WriteLine(" >> Server Started");
clientSocket = serverSocket.AcceptTcpClient();
Console.WriteLine(" >> Accept connection from client");
requestCount = 0;
while ((true))
{
try
{
requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[10025];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
Console.WriteLine(" >> Data from client - " + dataFromClient);
string serverResponse = "Last Message from client" + dataFromClient;
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
Console.WriteLine(" >> " + serverResponse);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
clientSocket.Close();
serverSocket.Stop();
Console.WriteLine(" >> exit");
Console.ReadLine();
客户端程序
try {
TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
tcpclnt.Connect("192.168.128.1",8888);
// use the ipaddress as in the server program
Console.WriteLine("Connected");
Console.Write("Enter the string to be transmitted : ");
String str=Console.ReadLine();
Stream stm = tcpclnt.GetStream();
ASCIIEncoding asen= new ASCIIEncoding();
byte[] ba=asen.GetBytes(str);
Console.WriteLine("Transmitting.....");
stm.Write(ba,0,ba.Length);
byte[] bb=new byte[100];
int k=stm.Read(bb,0,100);
for (int i=0;i<k;i++)
Console.Write(Convert.ToChar(bb[i]));
tcpclnt.Close();
}
catch (Exception e) {
Console.WriteLine("Error..... " + e.StackTrace);
}
【问题讨论】:
-
使用搜索。你必须监听机器分配给任何网卡的 IP,除非你的调制解调器处于桥接模式,否则你有一个内部 IP 地址,很可能是
192.168.x.x。只需绑定到0.0.0.0。 -
TcpClient clientSocket = default(TcpClient);是多余的。稍后在实际分配变量TcpClient clientSocket = serverSocket.AcceptTcpClient();时声明TcpClient