tcp/ip客户端服务器无法在互联网上工作
本文关键字:互联网 工作 ip 客户端 服务器 tcp | 更新日期: 2023-09-27 18:05:31
我将在TCP/IP模式下设置一个小型客户端/服务器服务器,我使用VS2010、C#来开发我的应用程序,我在谷歌上搜索了很多,可以找到一些源代码,但它们都不能在互联网上工作,我可以在我自己的本地系统中得到一些答案,即我运行我的服务器,然后监听我自己的localhost(127.0.0.1(,然后发送一些数据(例如使用telnet(,它工作得很好,但当我在互联网上做同样的事情时,我什么都得不到!我想使用端口80,因为我想发送/接收http数据,我已经测试了几个源代码,这是我使用的最后一个代码(它在localhost和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);
}
发送数据(客户端(,当然我没有使用过这个代码,对吗?
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吗?我的网络服务器有一个静态IP,但我的客户端没有,这是个问题吗?我想我在定义端口和IP时遇到了一些问题,我应该如何设置它们?我的服务器有一个特定的IP,但我不知道我的客户的IP,你能一步一步地向我解释吗?感谢
此场景中最常见的两个问题:
- 确保服务器的路由器正在使用端口转发将HTTP请求从路由器转发到服务器
- 请确保连接到服务器的公共IP地址,而不是其本地网络地址