Socket是使用TCP协议,此协议发送数据前会建立连接,保证数据的可靠性,
下面是个客户端和服务器端Socket通信 的模版:
package demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服务器接收到一个Socket后启动一个线程处理数据传输
public class SocketThread extends Thread{
private Socket s;
public SocketThread(Socket s) {
// TODO Auto-generated constructor stub
this.s=s;
}
@Override
public void run() {
try {
OutputStreamWriter outw=new OutputStreamWriter(s.getOutputStream());
PrintWriter pw=new PrintWriter(outw);
pw.write("welcome:I am server");
pw.close();
outw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
//服务器端启动一个ServerSocket,使用accept()循环监听客户端请求:
public class Servermain {
public static void main(String[] args){
try {
ServerSocket server=new ServerSocket(8080);
Socket socket;
//服务端循环监听
while((socket=server.accept())!=null){
//接收到连接,启动一个线程处理
new SocketThread(socket).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端连接
public class ClientMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket c;
try {
for (int i = 0; i < 5; i++) {
c = new Socket("localhost",8080);
InputStreamReader inr=new InputStreamReader(c.getInputStream());
BufferedReader br=new BufferedReader(inr);
System.out.println(br.readLine());
br.close();
inr.close();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
启动顺序是先启动服务器,然后启动客户端进行连接。此例中有5个客户端进行连接。效果截图: