Java 服务器、客户端套接字实现
我正在编写一个使用Java套接字的服务器、客户端聊天程序。这是我的服务器套接字类代码Java 服务器、客户端套接字实现,java,sockets,Java,Sockets,我正在编写一个使用Java套接字的服务器、客户端聊天程序。这是我的服务器套接字类代码 import java.io.*; import java.net.*; public class Main { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; try { serverSocket =
import java.io.*;
import java.net.*;
public class Main {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8085);
} catch (IOException ex) {
System.out.println("IO Error, " + ex);
System.exit(1);
}
Socket clientSocket = null;
System.out.println("Listening for incoming connections");
try {
clientSocket = serverSocket.accept();
} catch (IOException ex) {
System.out.println("Failed to accept connection " + ex);
System.exit(1);
}
System.out.println("Connection Successful");
System.out.println("Listening to get input");
PrintStream output = new PrintStream(clientSocket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = input.readLine()) != null) {
System.out.println(inputLine);
System.out.println("Server: ");
inputLine = input.readLine();
output.println(inputLine);
if (!inputLine.equals("exit")) {
} else {
break;
}
}
output.close();
input.close();
clientSocket.close();
serverSocket.close();
}
}
客户端能够建立连接并向服务器发送消息。服务器还可以接收客户端发送的消息。问题是,当消息从服务器发送时,客户端没有收到消息。这是我的客户端套接字代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Client {
public static void main(String [] args) throws Exception
{
BufferedReader input;
PrintStream output;
BufferedReader clientInput;
try (Socket client = new Socket("127.0.0.1", 8085)) {
input = new BufferedReader(new InputStreamReader(client.getInputStream()));
output = new PrintStream(client.getOutputStream());
clientInput = new BufferedReader(new InputStreamReader(System.in));
String line;
while(true)
{
System.out.println("Client: ");
line = clientInput.readLine();
output.println("Server: " + line );
if(line.equals("quit"))
{
break;
}
}
}
input.close();
clientInput.close();
output.close();
}
}
服务器端:
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8085);
} catch (IOException ex) {
System.out.println("IO Error, " + ex);
System.exit(1);
}
Socket clientSocket = null;
System.out.println("Listening for incoming connections");
try {
clientSocket = serverSocket.accept();
} catch (IOException ex) {
System.out.println("Failed to accept connection " + ex);
System.exit(1);
}
System.out.println("Connection Successful");
System.out.println("Listening to get input");
PrintStream output = new PrintStream(clientSocket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = input.readLine()) != null) {
System.out.println("Client request: " + inputLine);
String resp = "some response as you need";
output.println(resp);
System.out.println("Server response: " + resp);
if (!inputLine.equals("exit")) {
} else {
break;
}
}
output.close();
input.close();
clientSocket.close();
serverSocket.close();
}
}
客户端:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
BufferedReader input;
PrintStream output;
BufferedReader clientInput;
try (Socket client = new Socket("127.0.0.1", 8085)) {
input = new BufferedReader(new InputStreamReader(client.getInputStream()));
output = new PrintStream(client.getOutputStream());
clientInput = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String inputStr = clientInput.readLine();
output.println(inputStr);
System.out.println("Client: " + inputStr);
if (inputStr.equals("quit")) {
break;
}
String serverResp = input.readLine();
output.println("Server: " + serverResp);
}
}
}
}
它已经过测试。处理完输出流后,刷新输出流始终是一个好主意,您发送的信息可能已经缓冲。服务器希望从客户端输入中获得额外的一行:
while ((inputLine = input.readLine()) != null) {
System.out.println(inputLine);
System.out.println("Server: ");
inputLine = input.readLine(); // <--- here
请与我们分享到目前为止您是如何试图解决这个问题的。我(在本页顶部的搜索框中)搜索了
聊天java socket
,找到了数百个结果。@StephenP如果您提供了指向具有类似协议问题的特定问题的链接,我会将此标记为重复。套接字是通用的,程序员可能遇到的问题有很多细微差别。这是一个协议顺序问题的例子。@AlainO'Dea我本来打算投票以重复的方式结束,但我找不到(在我有时间的短时间内)一个合适的结束问题;但是我确实发现了很多我认为对OP有帮助的东西,所以我决定建议OP的设计需要search.System.in来阅读用户的命令。这很简单,所以我只给出了一些提示。好的,工作解决方案如下:)这不是问题所在。OP(正确地)确定消息是从客户端到服务器以及从服务器到客户端的。新线已经出现了冲水现象。
System.out.println("Server: " + input.readLine());