创建聊天应用程序Java套接字时出现问题
您好,我已经开始学习socket编程,我制作了一个聊天应用程序,但它不工作我不知道为什么,当服务器发送数据时,客户端打印并接收数据,但当客户端发送数据时,它没有在服务器中打印,输出也很奇怪,请帮助谢谢 正如您所看到的,在服务器控制台上,消息被打印了两次为什么 服务器代码>>创建聊天应用程序Java套接字时出现问题,java,sockets,server,client,Java,Sockets,Server,Client,您好,我已经开始学习socket编程,我制作了一个聊天应用程序,但它不工作我不知道为什么,当服务器发送数据时,客户端打印并接收数据,但当客户端发送数据时,它没有在服务器中打印,输出也很奇怪,请帮助谢谢 正如您所看到的,在服务器控制台上,消息被打印了两次为什么 服务器代码>> public class Server { public static Socket s; public static void main(String[] args) throws IOException {
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();