我无法连接两个客户端。是它bcoz我使用DataOutputStream和DataInputStream而不是BufferedReader和PrintWritter?出于某种原因,即使我将服务器插座和插座设置为通过本地主机和端口8000互连,它也不会互相连接。为什么我的客户不能相互沟通? (java服务器套接字)
我无法在这两个客户端之间发送消息。但是,是的,他们可以连接到服务器。但是,我希望我的客户互相沟通,以便它像在线聊天一样工作。
服务器端:
import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
public class Server extends JFrame {
// Text area for displaying contents
private static JTextArea jta = new JTextArea();
public static void main(String[] args) {
new Server();
}
public Server() {
setLayout(new BorderLayout());
add(new JScrollPane(jta), BorderLayout.CENTER);
setTitle("Server");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); // It is necessary to show the frame here!
// Place text area on the frame
try {
// Create a server socket
ServerSocket serverSocket = new ServerSocket(8000);
jta.append("Server started at " + new Date() + '\n');
try {
while (true) {
new Handler(serverSocket.accept()).start();
}
} finally {
serverSocket.close();
}
}
catch(IOException ex) {
System.err.println(ex);
}
}
public static class Handler extends Thread{
Socket socket;
DataInputStream inputFromClient;
DataOutputStream outputToClient;
public Handler(Socket socket){
this.socket = socket;
}
public void run(){
// Listen for a connection request
//Socket socket = serverSocket.accept();
try{
// Create data input and output streams
inputFromClient = new DataInputStream(socket.getInputStream());
outputToClient = new DataOutputStream(socket.getOutputStream());
while (true) {
// Receive data from the client
String message =inputFromClient.readUTF();
System.out.println("Server: Receive input");
jta.append("Word received from client: " + message + '\n');
// DO converting process
//String newMessage ="";
//newMessage= message.toUpperCase();
// Send data back to the client
outputToClient.writeUTF(message);
//jta.append("Word Converted: " + newMessage + '\n');
}
}catch(IOException ex) {
System.err.println(ex);
}
}
}
}
客户端
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Client extends JFrame {
// Text field for receiving data
private JTextField jtf = new JTextField();
// Text area to display contents
private JTextArea jta = new JTextArea();
// IO streams
private DataOutputStream toServer;
private DataInputStream fromServer;
public static void main(String[] args) {
new Client();
}
public Client() {
// Panel p to hold the label and text field
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Enter word: "), BorderLayout.WEST);
p.add(jtf, BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.RIGHT);
setLayout(new BorderLayout());
add(p, BorderLayout.NORTH);
add(new JScrollPane(jta), BorderLayout.CENTER);
jtf.addActionListener(new Listener()); // Register listener
setTitle("Client");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); // It is necessary to show the frame here!
try {
// Create a socket to connect to the server
Socket socket = new Socket("localhost", 8000);
// Socket socket = new Socket("130.254.204.36", 8000);
// Socket socket = new Socket("drake.Armstrong.edu", 8000);
// Create an input stream to receive data from the server
fromServer = new DataInputStream(
socket.getInputStream());
// Create an output stream to send data to the server
toServer =
new DataOutputStream(socket.getOutputStream());
}
catch (IOException ex) {
jta.append(ex.toString() + '\n');
}
}
private class Listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Get the data from the text field
String message = (jtf.getText().trim());
// Send the data to the server
toServer.writeUTF(message);
// Get data from the server
String serverMessage = fromServer.readUTF();
System.out.println("from server");
// Display to the text area
jta.append("Word is " + message + "\n");
jta.append("Word received from the server is "
+ serverMessage + '\n');
toServer.flush();
}
catch (IOException ex) {
System.err.println(ex);
}
}
}
}
我无法重现问题。奇迹般有效。 – Dawnkeeper 2014-11-21 10:19:19
我无法在这两个客户端之间发送消息。但是,是的,他们可以连接到服务器。但是,我希望我的客户相互沟通。 – 2014-11-21 10:21:18