java - 制作聊天应用程序 Java 套接字时出现问题
问题描述
您好,我已经开始学习套接字编程,并且我制作了一个聊天应用程序,但它不工作我不知道为什么,当服务器发送数据时客户端打印并接收它但是当客户端发送数据时它也没有在服务器中打印输出也很奇怪请帮忙谢谢
如您所见,在服务器控制台上,该消息被打印了 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();
推荐阅读
- c# - ASP.NET Core OAuth 的基本代码问题 (?)
- c# - 在 Xamarin Forms 中将 CachingStrategy 设置为 RecycleElement 的正确方法是什么?
- unix - 从图像文件夹替换博客中的png文件
- apache-kafka - kafka 主题分区的数量和数据中不同键的数量
- c# - 为什么我的行进立方体算法会留下洞?
- c# - 有没有办法避免在我的 Extension 方法中传递两个泛型参数?
- python - 在 PyGame 中编写一个在屏幕中心绘制图像的类
- node.js - 无法从节点模块导出变量并在我的 node-express 应用程序中使用该变量
- javascript - 如何让 gulp 函数串联运行?(一饮而尽下载)
- http - NGINX - 错误 502 除非设置了 User-Agent 标头