TCP/IP客户端服务器无法通过Internet工作 [英] tcp/ip client server not working over internet
问题描述
我要在TCP/IP模式下设置一个小型客户端/服务器服务器,我使用VS2010,C#开发我的应用程序,我在Google上搜索了很多,可以找到一些源代码,但是它们都无法在其中工作互联网,我可以在自己的本地系统中得到一些答案,即运行服务器,然后侦听自己的本地主机(127.0.0.1),然后发送一些数据(例如,使用telnet),它可以正常工作,但是当我执行相同操作时通过互联网我什么也没有!我想使用端口80,因为我想发送/接收http数据,所以我已经测试了几个源代码,这是我使用的最后一个代码(它可以在telnet的localhost上工作)
I'm going to setup a small client/server server in TCP/IP mode, I use VS2010,C# to develop my apps, I've googled a lot and could find some source codes, but none of them work in internet, I can get some answers in my own local system, i.e. I run my server, then listen for my own localhost (127.0.0.1) then send some data (for example using telnet), it works fine but when I do the same over internet I get nothing! I want to use port 80, as I want to send/receive http data, I have tested several source codes, here is the last code I have used (and it works on localhost with telnet)
//服务器代码:
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);
}
发送数据(客户端),我当然没用过这段代码,对吗?
send data (client), of course I haven't used this code, is it right?
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)中包含服务器代码,但是当前正在普通PC上对其进行测试,我在做什么错呢?我想从随机系统(具有随机IP)向服务器(我知道其IP)发送一些http数据包,该怎么办?tcp/ip是否有可能还是我应该做其他事情?它与静态IP有关吗?我当然应该有静态IP吗?我的Web服务器有一个静态IP,但我的客户端没有,这是问题吗?我认为在定义端口和IP时遇到一些问题,该如何设置?我的服务器有特定的IP,但是我不知道客户的IP,请您逐步向我解释一下吗?谢谢
I'm going to have the server code in my Server (winserver 2008R2) but currently test it in normal PCs, what am I doing wrong? I want to send some http packet from a random system (with a random IP) to my server (which I know its IP), what should I do? is it possible with tcp/ip or I should do something else? is it related to static IP? should I certainly have static IP? my web server has a static IP but my clients do not, is it a problem? I think I have some problem in defining ports and IPs, how should I set them? my server has a specific IP, but I don't know IP of my clients, would you please explain it to me step by step? thanks
推荐答案
此方案中最常见的两个问题:
The two most common problems in this scenario:
- Ensure your server's router is using port forwarding to forward HTTP requests from the router to the server.
- Ensure you are connecting to the server's public IP address, not its local network address.
这篇关于TCP/IP客户端服务器无法通过Internet工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!