我打算在TCP/IP模式下設置一個小型客戶端/服務器服務器,我使用VS2010,C#開發我的應用程序,我搜索了很多,可以找到一些源代碼,但他們都沒有在互聯網上工作,我可以在我自己的本地系統中得到一些答案,即我運行我的服務器,然後監聽我自己的本地主機(127.0.0.1),然後發送一些數據(例如使用telnet),它工作正常,但當我通過互聯網做同樣的事情時,我什麼也得不到!我想使用端口80,因爲我想發送/接收HTTP數據,我測試了幾個源代碼,這裏是我使用的最後一個代碼(並且它在localhost上使用telnet工作)tcp/ip客戶端服務器沒有通過互聯網工作
//服務器代碼:
form_load()
IPAddress localAddress = IPAddress.Parse("127.0.0.1");
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndpoint = new IPEndPoint(localAddress, 80);
// Bind the socket to the end point
listenSocket.Bind(ipEndpoint);
// Start listening, only allow 1 connection to queue at the same time
listenSocket.Listen(1);
listenSocket.BeginAccept(new AsyncCallback(ReceiveCallback), listenSocket);
Console.WriteLine("Server is waiting on socket {0}", listenSocket.LocalEndPoint);
// Start being important while the world rotates
while (true)
{
Console.WriteLine("Busy Waiting....");
Thread.Sleep(2000);
}
public static void ReceiveCallback(IAsyncResult AsyncCall)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
Byte[] message = encoding.GetBytes("I am a little busy, come back later!");
Socket listener = (Socket)AsyncCall.AsyncState;
Socket client = listener.EndAccept(AsyncCall);
Console.WriteLine("Received Connection from {0}", client.RemoteEndPoint);
client.Send(message);
Console.WriteLine("Ending the connection");
client.Close();
listener.BeginAccept(new AsyncCallback(ReceiveCallback), listener);
}
發送數據(客戶端),當然我還沒有用過這段代碼,是不是?
public static string SendData()
{
TcpClient client = new TcpClient();
client.Connect(IP, 80);
StreamWriter sw = new StreamWriter(client.GetStream());
StreamReader sr = new StreamReader(client.GetStream());
//if statement evalutes to see if the user has selected to update the server
//" " = update server
//"" = do not update the server
//if (updateData.Equals(""))
//{
// space = "";
//}
//else if (!updateData.Equals(""))
//{
// space = " ";
//}
//Refrences stream writer, username variable passed in from GUI
//space variable provides update function: "" = dont update. " " = update database.
sw.WriteLine("h");
sw.Flush();
//data send back from the server assigned to string variable
//string recieved = sr.ReadLine();
return "";
}
我打算讓服務器代碼在我的服務器(winserver 2008R2),但目前在正常的電腦進行測試,我究竟做錯了什麼?我想從隨機系統(使用隨機IP)發送一些http數據包到我的服務器(我知道它的IP),我該怎麼辦?是否有可能與TCP/IP或我應該做別的? 它與靜態IP有關嗎?我應該有靜態IP嗎?我的網絡服務器有一個靜態IP,但我的客戶沒有,這是一個問題? 我想我在定義端口和IP時遇到了一些問題,我應該如何設置它們?我的服務器有一個特定的IP,但我不知道我的客戶的IP,請你一步一步向我解釋一下嗎? 感謝
謝謝,但我怎麼知道服務器路由器?我可以使用自己的PC作爲我的測試服務器嗎?這樣我如何測試路由器?服務器公共IP地址是什麼意思?我怎麼找到它? –
查看鏈接已添加到答覆。 –
謝謝,但我找不到明確的答案,有沒有一個很好的教程/示例顯示的東西在網上工作? –