【发布时间】:2014-02-22 11:52:46
【问题描述】:
我在一个新线程中打开了一个服务器套接字端口并将客户端连接到该端口。我希望在客户端套接字完成工作后关闭它。(我知道我的 while 循环中存在一些问题run() 方法,但我无法理解它。 当我运行我的服务器应用程序以打开一个端口并侦听一个连接时,它会给出一个错误提示 java.net.BindException: Address already in use: JVM_Bind
请详细告诉我我在这里做错了什么,并详细给出一个理论上的解决方案。 真的很感激。如果这是一个愚蠢的问题,请原谅我
Jshirwani
服务器
import java.io.*;
import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.*;
public class TryThreads extends Thread
{
private int Portnumber;
private static String inputLine;
public TryThreads(int portNumber)
{
Portnumber = portNumber;
setDaemon(false);
}
public static void main(String[] args)
{
//create three threads
Thread first = new TryThreads(63400);
Thread second = new TryThreads(63401);
first.start();
second.start();
//third.start();
System.out.println("ending main");
return;
}
public void run()
{
//System.out.println("one socket port opened");
try
{
System.out.println("one socket port opened");
System.out.println("one socket port opened");
while (true)
{
ServerSocket serverSocket = new ServerSocket(Portnumber);
System.out.println("ending main2");
//System.out.println("one socket port opened");
Socket clientSocket = serverSocket.accept();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while((inputLine = bufferedReader.readLine()) != null)
System.out.println(inputLine);
}
}
catch(IOException e)
{
System.out.println(e);
}
}
}
客户
import java.io.*;
import java.net.Socket;
public class client
{
private static PrintWriter printWriter;
public static void main(String[] args)
{
BufferedReader in = null;
try
{
Socket socket = new Socket("localhost",63400);
printWriter = new PrintWriter(socket.getOutputStream(),true);
printWriter.println("Hello Socket");
printWriter.println("EYYYYYAAAAAAAA!!!!");
socket.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
【问题讨论】:
-
好的,同一个服务器的多个端口怎么打开?
-
忘记我说的话。您的循环尝试多次打开同一端口上的服务器套接字。请参阅 zahorak 的回答。
标签: java