//Server.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;public class Server extends JFrame{
private JTextArea jtaMessage;
private ObjectInputStream in;
private ObjectOutputStream out;

public Server(){
this.setLayout(new BorderLayout());
add(new JScrollPane(jtaMessage=new JTextArea()),BorderLayout.CENTER);
jtaMessage.setWrapStyleWord(true);
jtaMessage.setEditable(false);

try {
ServerSocket serverSocket=new ServerSocket(9090);
jtaMessage.append("Server Started at "+new java.util.Date());
int clientNo=1;
while(true){
Socket socket=serverSocket.accept();
InetAddress inetAddress=socket.getInetAddress();
jtaMessage.append("Client No"+clientNo+"'s name is "+inetAddress.getHostName()+"\n");
jtaMessage.append("Client No"+clientNo+"'s address is "+inetAddress.getHostAddress()+"\n");

in=new ObjectInputStream(socket.getInputStream());
out=new ObjectOutputStream(socket.getOutputStream());
Student student=(Student)in.readObject();
System.out.println(student.toString());

clientNo++;
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args){
Server frame=new Server();
frame.setTitle("EX25.6 Server");
frame.setLocationRelativeTo(null);
frame.setSize(600,400);
frame.setVisible(true);
}
}//Student.java
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String studentId;
private String name;
private String dormitory;

public Student(){

}
public Student(String studentId,String name,String dormitory){
this.studentId=studentId;
this.name=name;
this.dormitory=dormitory;
}

public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDormitory() {
return dormitory;
}
public void setDormitory(String dormitory) {
this.dormitory = dormitory;
}
public String toString(){
return studentId+" "+name+" "+dormitory;
}
}
Java网络编程

解决方案 »

  1.   

    执行顺序的问题。你先执行这句Server frame=new Server();进入构造函数内,到这句Socket socket=serverSocket.accept();程序会形成阻塞,通信线程被挂起。下面的程序是无法执行的。import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;public class Server extends JFrame {
    private JTextArea jtaMessage;
    private ObjectInputStream in;
    private ObjectOutputStream out; public Server() {
    this.setLayout(new BorderLayout());
    add(new JScrollPane(jtaMessage = new JTextArea()), BorderLayout.CENTER);
    jtaMessage.setWrapStyleWord(true);
    jtaMessage.setEditable(false); }

    public  void startScoket()
    {
    try {
    ServerSocket serverSocket = new ServerSocket(9090);
    jtaMessage.append("Server Started at " + new java.util.Date());
    int clientNo = 1;
    while (true) {
    Socket socket = serverSocket.accept();
    InetAddress inetAddress = socket.getInetAddress();
    jtaMessage.append("Client No" + clientNo + "'s name is "
    + inetAddress.getHostName() + "\n");
    jtaMessage.append("Client No" + clientNo + "'s address is "
    + inetAddress.getHostAddress() + "\n"); in = new ObjectInputStream(socket.getInputStream());
    out = new ObjectOutputStream(socket.getOutputStream());
    // Student student=(Student)in.readObject();
    // System.out.println(student.toString()); clientNo++;
    }
    } catch (Exception e) {
    e.printStackTrace();
    } } public static void main(String[] args) {
    Server frame = new Server();
    frame.setTitle("EX25.6 Server");
    frame.setLocationRelativeTo(null);
    frame.setSize(600, 400);
    frame.setVisible(true);
    frame.startScoket();
    }
    }