Java 如何防止mac终端(命令提示窗口)上的客户端返回null并使其等待发送文本消息
我正在尝试制作一个程序,该程序将互相发送和接收文本消息(UTF 8字符串),类似于两部手机在两个单独的.java文件(一个客户端一个服务器)(eclipse)中使用两个单独的线程互相发送文本消息,但文本消息将出现在命令提示符(mac终端输出)上 null的屏幕截图(见右侧窗口): 在屏幕截图中,左侧窗口将是服务器,右侧窗口将是客户端 服务器的命令行参数为:Java 如何防止mac终端(命令提示窗口)上的客户端返回null并使其等待发送文本消息,java,cmd,client,Java,Cmd,Client,我正在尝试制作一个程序,该程序将互相发送和接收文本消息(UTF 8字符串),类似于两部手机在两个单独的.java文件(一个客户端一个服务器)(eclipse)中使用两个单独的线程互相发送文本消息,但文本消息将出现在命令提示符(mac终端输出)上 null的屏幕截图(见右侧窗口): 在屏幕截图中,左侧窗口将是服务器,右侧窗口将是客户端 服务器的命令行参数为: java DirectMessengerServer -l 3000 客户端的命令行参数为: java DirectMessengerC
java DirectMessengerServer -l 3000
客户端的命令行参数为:
java DirectMessengerClient 3000
“-l”稍后将用于区分客户端和服务器(暂时忽略此项)
端口号为3000
客户端代码(DirectMessengerClient.java):
服务器代码(DirectMessengerServer.java):
import java.io.*;
导入java.net。*;
导入java.util.*;
导入静态java.nio.charset.StandardCharsets.*;
公共类DirectMessenger服务器
{
公共静态void main(字符串args[])引发IOException
{
线程服务器=新线程()
{
公开作废运行()
{
System.out.println(“服务器线程正在运行”);
ServerSocket服务器_socket=null;
Socket-client\u-Socket;
字符串消息1;
对于(int i=0;i
我的问题是:客户端不等待文本消息,而是出于某种原因(不确定为什么)返回null。有没有办法让客户端在退出并返回null之前等待文本消息
import java.io.*;
import java.net.*;
import java.util.*;
import static java.nio.charset.StandardCharsets.*;
public class DirectMessengerClient
{
public static void main(String args[]) throws IOException
{
Thread Client = new Thread ()
{
public void run ()
{
System.out.println("Client thread is now running");
ServerSocket server_socket = null;
Socket client_socket = null;
Socket smtpSocket = null;
DataOutputStream outputstream = null;
DataInputStream inputstream = null;
try
{
System.out.println("Try block begins..");
int port_number1= Integer.valueOf(args[0]);
// ServerSocket listener = new ServerSocket(port_number1);
System.out.println("Listening for connections..");
System.out.println( "Listening on port: " + Integer.toString( port_number1 ) );
client_socket= server_socket.accept();
BufferedReader reader= new BufferedReader(new InputStreamReader(client_socket.getInputStream(), "UTF8"));
PrintWriter output= new PrintWriter( client_socket.getOutputStream(), true );
outputstream = new DataOutputStream(smtpSocket.getOutputStream());
inputstream = new DataInputStream(smtpSocket.getInputStream());
String input_line= reader.readLine();
System.out.println( "Received from client: " );
System.out.println( input_line );
output.println( input_line );
}
catch ( Exception e )
{
System.out.println( e.getMessage() );
}
//server.close();
// }
}
};
Client.start();
}
}
import java.io.*;
import java.net.*;
import java.util.*;
import static java.nio.charset.StandardCharsets.*;
public class DirectMessengerServer
{
public static void main(String args[]) throws IOException
{
Thread Server = new Thread ()
{
public void run ()
{
System.out.println("Server thread is now running");
ServerSocket server_socket = null;
Socket client_socket;
String message1;
for(int i = 0; i < args.length; i++)
{
if(args[i].equals("-l"))
{
try
{
System.out.println("Try block begins..");
int port_number1= Integer.valueOf(args[i+1]);
ServerSocket listener = new ServerSocket(port_number1);
System.out.println("Listening for connections..");
System.out.println( "Listening on port: " + Integer.toString( port_number1 ) );
Socket socket = listener.accept();
client_socket= server_socket.accept();
BufferedReader reader= new BufferedReader(new InputStreamReader(client_socket.getInputStream(), "UTF8"));
PrintWriter output= new PrintWriter( client_socket.getOutputStream(), true );
String input_line= reader.readLine();
System.out.println( "Received from client: " );
System.out.println( input_line );
output.println( input_line );
}
catch ( Exception e )
{
System.out.println( e.getMessage() );
}
//server.close();
}
}
}
};
Server.start();
}
}