感觉socket编程都差不都,服务器端绑定一个端口,然后accept监听。client申请一个socket向服务器端建立连接。
下面的代码是一个十分简单的echoserver
代码
package network;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class EchoServerWorker extends Thread {
private Socket socket = null;
private static int count = 0;
private final int id ;
public EchoServerWorker(Socket socket){
this.socket = socket;
this.id = count++;
}
public void run(){
try {
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
while(true){
char temp = in.readChar();
System.out.println("Worker " + this.id + " receive: " + temp);
out.writeChar(temp);
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Worker:\t" + this.id);
e.printStackTrace();
}
}
}
package network;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer extends Thread{
private ServerSocket serverSocket = null;
public EchoServer(int port) throws IOException{
this.serverSocket = new ServerSocket(port);
}
public void run(){
while(true){
Socket socket;
try {
socket = this.serverSocket.accept();
EchoServerWorker worker = new EchoServerWorker(socket);
worker.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package network;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Client extends JFrame implements Runnable {
private Socket socket = null;
private static int count = 0;
private final int id ;
private DataInputStream in = null;
private DataOutputStream out = null;
private JButton button = new JButton("Send");
public Client(int port) throws UnknownHostException, IOException{
this.socket = new Socket("localhost",port);
this.id = count++;
}
public void run(){
this.setTitle("client " + this.id);
this.add(this.button);
this.setSize(100, 60);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowListener(){
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
try {
socket.close();
setVisible(false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
});
this.setVisible(true);
try {
in = new DataInputStream(this.socket.getInputStream());
out = new DataOutputStream(this.socket.getOutputStream());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
this.button.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
try {
out.writeChar('A' + id);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
try {
char temp = ' ';
while(true){
temp = in.readChar();
System.out.println("client " + this.id +" receive: " + temp);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package network;
import java.io.IOException;
public class Tes {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
EchoServer server = new EchoServer(8096);
server.start();
Client a = new Client(8096);
Client b = new Client(8096);
Client c = new Client(8096);
Thread clientA = new Thread(a);
Thread clientB = new Thread(b);
Thread clientC = new Thread(c);
clientA.start();
clientB.start();
clientC.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}