【发布时间】:2014-02-22 01:21:58
【问题描述】:
我正在尝试在服务器套接字上打开多个端口,以便可以连接多个客户端。每次我创建一个线程并启动它(我知道将调用重写的 run 方法)我打开一个端口并监听客户端。
但问题是当我运行客户端套接字项目并尝试连接到我在服务器中打开的端口时,它显示java.net.connectException : connection refused:connect。
我还注意到发生了一件奇怪的事情。每次运行“服务器代码”时,控制台窗口中的输出都不同
过去 3 天我一直在做这件事,但我猜我什么也没取得。
注意:这个问题对我来说是独一无二的,因为我在这个论坛上的任何地方都没有发现这个特殊问题,所以请善待我,因为我是 java 和 socket 编程的新手,尽管我已经在 c++ 上编码了很长一段时间了.
服务器套接字
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(true);
}
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()
{
try
{
System.out.println("one socket port opened");
ServerSocket serverSocket = new ServerSocket(Portnumber);
System.out.println("one socket port opened");
while (true)
{
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!!!!");
}
catch(Exception e)
{
System.out.println(e);
}
}
}
【问题讨论】:
-
很抱歉,这个问题很明显,但是您是否确认单独打开两个端口时它们都可以工作?
-
您确实意识到您不需要“多个端口”来处理多个客户端,是吗?
-
当我只有一个端口和一个客户端没有使用线程时端口确实打开了,在我使用线程后,它进入运行块但不进入运行块的while块
-
我不知道你在上一条评论中想说什么,但基本上......你是怎么做的不是你写服务器的方式。你只使用一个端口。
-
这不是我现在的动力,是的,我不知道一个端口可以处理多个客户端,我当然想了解这一点。