我有一个客户端和一个服务器。客户端在特定端口上绑定一个套接字,服务器向客户端发回一个新端口,客户端应在新端口号上绑定一个新套接字。
从主服务器线程开始,我启动一个线程,一旦服务器准备好并正在监听新端口,就向客户端发送消息,以便客户端可以尝试连接到新端口。来自子线程的管道没有将消息发送到客户端。所以客户端和服务器都冻结了,看起来像是死锁,但我不确定。客户端:系统中的这行代码。出来println(“来自服务器:”inMsg_rport);没有执行。
服务器代码:
class server
{
public static void main(String argv[]) throws Exception
{
String newPort;
ServerSocket serverSocket = null;
Socket clientSocket = null;
try
{
serverSocket = new ServerSocket(5555);
clientSocket = serverSocket.accept();
DataOutputStream serverOut =
new DataOutputStream(clientSocket.getOutputStream());
int r_port = 5556;
Thread appThread = new Thread(new serverApp(serverOut, r_port));
appThread.start();
}
catch(IOException e)
{
System.out.println(e);
}
}
static class serverApp implements Runnable
{
DataOutputStream serverOut;
int nPort;
public serverApp(DataOutputStream servO, int r_port)
{
this.serverOut = servO;
this.nPort = r_port;
}
@Override
public void run()
{
ServerSocket serverSocket = null;
Socket clientSocket = null;
try
{
serverSocket = new ServerSocket(nPort);
serverOut.writeBytes(sr_port);
clientSocket = serverSocket.accept();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}
客户端代码:
class client {
public static void main(String argv[]) throws Exception
{
String serverIp = argv[0];
String msg = argv[2];
int port = Integer.parseInt(argv[1]);
Socket clientSocket = new Socket(InetAddress.getByName(serverIp), port);
BufferedReader clientIn =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
String inMsg_rport = clientIn.readLine();
System.out.println("FROM SERVER: " + inMsg_rport);
int r_port = Integer.parseInt(inMsg_rport);
clientSocket.close();
System.out.println("Closed connection");
Socket new_clientSocket = new Socket(InetAddress.getByName(serverIp), r_port);
}
}
readLine()
在您的客户端中是一个阻塞调用,等待行尾字符
http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
您没有发送行尾字符。您正在服务器中使用数据输出流
,并发送原始字节。
不要在您的服务器中使用DataOutputStream
;我认为这不是您真正想要的。只需将端口号作为带有行尾字符的文本发送即可。
问题内容: 我正在尝试以客户端/服务器方式制作Java应用程序。客户端是SWT中的GUI,它显示来自服务器的数据。服务器已连接到数据库。 好的,对此感到抱歉,我确定这是一个经典问题,但我不知道如何开始。 在我为他们工作的一个项目中,他们实施了很多魔术来透明地调用Glassfish服务器。 我不想使用Glassfish服务器。我只想要简单的Java语言。但是代理的概念似乎很酷。 你有这种想法或例子吗
问题内容: 我正在尝试使用我一直在努力的客户端/服务器程序实现多线程。我需要允许多个客户端同时连接到服务器。我目前有4类:客户端,服务器,协议和用于处理线程的工作器。以下代码是我对这些类的拥有的代码: SocketServer类: SocketClient类别: 协议类别: ClientWorker类: 当我运行服务器和客户端时,一切正常。然后,当我尝试运行另一个客户端时,它只是挂在那儿,没有提示
但是所有的答案和评论对链接帖子的回应也没有太大帮助
问题内容: 我正在编写一个Java包,该包将由另一种语言(matlab)调用。如果我的matlab进程结束,我希望Java进程继续运行。每当MATLAB重新启动时,它都应该能够与现有的运行过程进行通信。因此,我认为我需要让Java应用程序通过客户端/服务器模型中的套接字进行通信。我设想具有一组简单的功能: startServer(主机,端口) runCommand(服务器,命令…) stopSer
我是编码和Java的新手,我已经创建了一个简单的客户端-服务器程序,客户端可以请求一个文件。它的内容将显示在浏览器页面中,还有一些细节,如数据类型和长度。我现在有一个问题,我不确定如何在浏览器中显示正确连接的服务器响应,如“HTTP/1.1 200 OK”和关闭的连接,如“Connection: close”。我有一个处理响应的方法,如下所示: 对我如何做到这一点有什么建议吗?非常感谢。