天天看點

非常簡單的Socket聊天程式

新手一枚   不好别噴的太嚴重了

建立 服務端 :

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 
 * @author bigSea
 *	Socket服務端
 */
public class MyTcpService {
	
	public static void main(String[] args) {
		System.out.println("主機啟動。。。");
		try {
			//建立伺服器,并開放10000端口
			ServerSocket server = new ServerSocket(10000);
			while(true){
				//從連接配接隊列中取出一個連接配接,如果沒有則等待
				Socket socket = server.accept();
				//啟動線程
				new Thread(new ToClientDialog(socket)).start();
				System.out.println("用戶端連接配接成功      位址:"+socket.getInetAddress()+"   端口:"+socket.getPort());//接收和發送資料
				
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
           

ToClientDialog類:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 
 * @author bigSea
 *	向用戶端發送資料
 */
public class ToClientDialog implements Runnable{

	private Socket dialogSocket = null;
	
	public ToClientDialog() {
		super();
	}
	
	//初始化
	public ToClientDialog(Socket socket){
		dialogSocket = socket;
	}
	
	public void run() {
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		if (dialogSocket != null) {
			BufferedReader in;
			PrintWriter out;
			try {
				//接收
				in = new BufferedReader(new InputStreamReader(dialogSocket.getInputStream()));
				//輸出
				out = new PrintWriter(dialogSocket.getOutputStream(), true);
				//擷取使用者輸入
				BufferedReader line = new BufferedReader(new InputStreamReader(
						System.in));
				while(true){
					//接收用戶端發送來的資料
					String msg = in.readLine();
					if (msg.equals("end")) {
						break;
					}
					System.out.println(sdf.format(new Date()) + "  client:" + msg);
					//向用戶端發送使用者輸入的資料
					out.println(line.readLine());
				}
				
				line.close();
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}
           

用戶端代碼:

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @author bigSea
 *  Socket 服務端
 */
public class MyTcpClient {
	
	public static void main(String[] args) {
		System.out.println("客戶機啟動。。。");
		Socket socket;
		try {
			//連接配接主機位址。
			socket = new Socket("192.168.72.175", 10000);
			//啟動
			new Thread(new ToServiceDialog(socket)).start();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
           

ToServiceDialog代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 
 * @author bigSea
 *  向服務端發送資訊
 */
public class ToServiceDialog implements Runnable {

	private Socket dialogSocket = null;	
	
	public ToServiceDialog(){
	}
	
	//初始化
	public ToServiceDialog(Socket socket){
		dialogSocket = socket;
		System.out.println("連接配接"+socket.getInetAddress().getHostName()+"主機成功");
	}
	
	public void run() {
		BufferedReader in;
		PrintWriter out;
		BufferedReader line;

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		if (dialogSocket != null) {
			try {
				//接收
				in = new BufferedReader(new InputStreamReader(
						dialogSocket.getInputStream()));
				//輸出
				out = new PrintWriter(dialogSocket.getOutputStream(), true);
				//擷取使用者輸入
				line = new BufferedReader(new InputStreamReader(
						System.in));
				while(true){
					//接受控制台輸入的資料
					String sendMsg = line.readLine();
					//向服務端發送資料
					out.println(sendMsg);
					if (sendMsg.equals("end")) {
						break;
					}
					//接收服務端發送來的資料
					String msg = in.readLine();
					System.out.println(sdf.format(new Date()) + "  service:" + msg);
				}
				line.close();
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}
           

示範效果:

非常簡單的Socket聊天程式
非常簡單的Socket聊天程式



繼續閱讀