创建聊天应用程序 Java 套接字时出现问题
Problem Making a Chat Application Java Socket
您好,我已经开始学习套接字编程,并且制作了一个聊天应用程序,但它无法正常工作我不知道为什么,当服务器发送数据时客户端打印并接收它但是当客户端发送数据时它没有在服务器中打印也输出也很奇怪请帮忙谢谢
如您所见,在服务器控制台上打印了 2 次消息,为什么??
服务器代码>>
public class Server {
public static Socket s;
public static void main(String[] args) throws IOException {
System.out.println("Server has Started");
ServerSocket ss = new ServerSocket(9999);
System.out.println("Server is Waiting For Client Connection");
s = ss.accept();
System.out.println("Client connected");
Runnable send = new sender();
Runnable recieve = new sender();
Thread sends = new Thread(send);
Thread recieves = new Thread(recieve);
sends.start();
recieves.start();
}
}
public class reciever implements Runnable{
@Override
public void run() {
while(true) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(Server.s.getInputStream()));
String message = br.readLine();
System.out.println("Client:" + message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class sender implements Runnable{
@Override
public void run() {
while(true) {
try {
Scanner scan = new Scanner(System.in);
System.out.print("Message: ");
String message = scan.nextLine();
OutputStreamWriter os = new OutputStreamWriter(Server.s.getOutputStream());
PrintWriter out = new PrintWriter(os);
out.println(message);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户代码>>
public class Client {
public static Socket s ;
public static void main(String[] args) throws Exception {
String ip = "localhost";
int port = 9999;
s = new Socket(ip, port);
Runnable send = new sender();
Runnable recieve = new reciever();
Thread sends = new Thread(send);
Thread recieves = new Thread(recieve);
sends.start();
recieves.start();
}
}
public class reciever implements Runnable{
@Override
public void run() {
while(true) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(Client.s.getInputStream()));
String message = br.readLine();
System.out.println("Server:" + message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class sender implements Runnable {
@Override
public void run() {
while(true) {
try {
Scanner scan = new Scanner(System.in);
System.out.print("Message: ");
String message = scan.nextLine();
OutputStreamWriter os = new OutputStreamWriter(Client.s.getOutputStream());
PrintWriter out = new PrintWriter(os);
out.println(message);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在服务器代码更改中
Runnable recieve = new sender();
至
Runnable recieve = new reciever();
您好,我已经开始学习套接字编程,并且制作了一个聊天应用程序,但它无法正常工作我不知道为什么,当服务器发送数据时客户端打印并接收它但是当客户端发送数据时它没有在服务器中打印也输出也很奇怪请帮忙谢谢
如您所见,在服务器控制台上打印了 2 次消息,为什么??
服务器代码>>
public class Server {
public static Socket s;
public static void main(String[] args) throws IOException {
System.out.println("Server has Started");
ServerSocket ss = new ServerSocket(9999);
System.out.println("Server is Waiting For Client Connection");
s = ss.accept();
System.out.println("Client connected");
Runnable send = new sender();
Runnable recieve = new sender();
Thread sends = new Thread(send);
Thread recieves = new Thread(recieve);
sends.start();
recieves.start();
}
}
public class reciever implements Runnable{
@Override
public void run() {
while(true) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(Server.s.getInputStream()));
String message = br.readLine();
System.out.println("Client:" + message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class sender implements Runnable{
@Override
public void run() {
while(true) {
try {
Scanner scan = new Scanner(System.in);
System.out.print("Message: ");
String message = scan.nextLine();
OutputStreamWriter os = new OutputStreamWriter(Server.s.getOutputStream());
PrintWriter out = new PrintWriter(os);
out.println(message);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户代码>>
public class Client {
public static Socket s ;
public static void main(String[] args) throws Exception {
String ip = "localhost";
int port = 9999;
s = new Socket(ip, port);
Runnable send = new sender();
Runnable recieve = new reciever();
Thread sends = new Thread(send);
Thread recieves = new Thread(recieve);
sends.start();
recieves.start();
}
}
public class reciever implements Runnable{
@Override
public void run() {
while(true) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(Client.s.getInputStream()));
String message = br.readLine();
System.out.println("Server:" + message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class sender implements Runnable {
@Override
public void run() {
while(true) {
try {
Scanner scan = new Scanner(System.in);
System.out.print("Message: ");
String message = scan.nextLine();
OutputStreamWriter os = new OutputStreamWriter(Client.s.getOutputStream());
PrintWriter out = new PrintWriter(os);
out.println(message);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在服务器代码更改中
Runnable recieve = new sender();
至
Runnable recieve = new reciever();