我是套接字编程的新手,所以我有一个问题。我正在尝试创建两个应用程序,一个服务器和一个客户端,它们必须通过互联网相互发送和接收文件(发送和接收文件)。将只有一个服务器和一个客户端,所以我决定,我不需要异步套接字连接。 我试图通过一个套接字连接发送和接收文件,但它不起作用。现在我尝试使用两个套接字,使用相同的IP和不同的端口在不同的线程中运行,但它不再起作用。我是否必须在源代码中找到问题,否则我将不得不使用异步套接字连接?
这是我的服务器端应用程序。两个套接字的代码非常相似,唯一 区别在于我正在使用的端口。
// My main thread starts another one, for the receiving of files
public static void StartListening() {
t = new Thread(receiveFile);
t.Start();
sendFile();
}
//
static void sendFile()
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 10999);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
handler = listener.Accept();
//code after connecting for sending files
while(true) {
//...
}
}
}
catch(Exception e) {}
}
static void receiveFile()
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while(true) {
handler = listener.Accept();
//code after connecting for receiving files
while(true) {
//...
}
}
}
catch(Exception e) {}
}
这就是我的客户端应用程序中用于连接套接字的代码。 唯一的区别在于套接字:
//Again i start a second thread, for the second socket
public static void StartClient() {
t = new Thread(receiveFile);
t.Start();
sendFile();
}
static void sendFile()
{
try
{
IPAddress ipAddress = IPAddress.Parse("95.110.62.74");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP);
//Code for sending to the server after connecting
while (true) { }
}
catch(Exception e) {}
}
catch(Exception e) { }
}
static void receiveFile()
{
try
{
IPAddress ipAddress = IPAddress.Parse("95.110.62.74");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 10999);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP);
//Code for sending to the server after connecting
while (true) { }
}
catch(Exception e) {}
}
catch(Exception e) { }
}
我在服务器和客户端应用程序中使用不同的IP,因为我的服务器位于路由器后面,我告诉路由器将连接转发到两个potrs。当我启动这两个程序时,它们只通过一个套接字连接,每次都不同,我的意思是有时它们连接到端口10999上的一个,有时连接到另一个,但从不连接到两个。
我不确定,如果我清楚地解释了一切:)
提前致谢