一.简单的通讯:
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();
}
}
@Override
public 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();
}
}
@Override
public 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);
}
}
}
}