Socket学习实例
一.简单的通讯:
1.编写服务端(Server.java):
?
package socketDemo;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class Server {private ServerSocket serverSocket;private Socket socket ;;private BufferedReader in;public Server(){try {serverSocket = new ServerSocket(10000); //绑定通讯端口while(true){socket = serverSocket.accept(); //接收客户端套接字,没有接入则一直处理堵塞状态in = new BufferedReader(new inputStreamReader(socket.getInputStream())); //获取传入流String str = in.readLine(); //读取流内容System.out.println("accept is :"+str); //输出内容in.close(); //关闭输入流socket.close(); // 关闭连接}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {new Server(); // 启动服务 }}?
2.编写客户端(Client.java)
package socketDemo;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class Client {private Socket socket;private PrintWriter out;private BufferedReader in;public Client(){try {socket = new Socket("192.168.0.10",10000); //接定要连接的ip与端口out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);//建立套接字输出流,并自动刷新in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//从系统输入设备建立输入流out.println(in.readLine()); //读取系统输入设置输入行,out.println会自动刷新out.close(); //关闭输出流in.close(); //关闭系统输入流socket.close(); //关闭连接套接字} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {new Client(); //启动客户端}}?
简单的socket通讯处理便成功了,注释应该很详细了吧;
二.多客户通讯处理
??? 1.编写服务端代码(Server.java):
package socketDemo2;import java.net.ServerSocket;import java.net.Socket;public class Server {private ServerSocket serverSocket;private Socket socket ;;public Server(){try {serverSocket = new ServerSocket(10000);while(true){socket = serverSocket.accept();new ServerThread(socket).start(); //启动线程处理客户端的连接}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {new Server();}}?
2.服务端多线程处理代码(ServerThread.java)
package socketDemo2;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;public class ServerThread extends Thread {private BufferedReader in = null;private BufferedWriter out = null;private Socket s;public ServerThread(Socket socket) {this.s = socket;try {in = new BufferedReader(new InputStreamReader(socket.getInputStream()));out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));System.out.println("服务开始启动.....");} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {try {String str = "";while (true) {str = in.readLine();System.out.println("accept " + str);}} catch (IOException e) {System.out.println("连接已经中断.....");} finally {try {in.close();out.close();if (!s.isClosed()) {s.close();}System.out.println("连接已关闭.....");} catch (IOException ioe) {ioe.printStackTrace();}}}}?
3.编写客户端代码(Client.java):
package socketDemo2;import java.net.Socket;public class Client {private Socket socket;public Client(){try {socket = new Socket("192.168.0.10",10000);new ClientThread(socket).start();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {new Client();}}?
4.编写客户端多线程处理代码(ClientThread.java)
package socketDemo2;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner;public class ClientThread extends Thread{private BufferedReader in = null;private PrintWriter out = null;private Socket socket = null;private Scanner si = null;public ClientThread(Socket s){this.socket = s;try{in = new BufferedReader(new InputStreamReader(s.getInputStream()));out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);}catch(Exception e){e.printStackTrace();}}@Overridepublic void run() {si = new Scanner(System.in);System.out.println("如果要结束本次通话,请输入 exit");while(true){String str = "";if(!(str = si.nextLine()).equals("exit")){out.println("you input : "+str);System.out.println("yout input : "+str);}else{System.out.println("客户端服务正在关闭");System.exit(0);}}}}??