Java socket简单聊天demo

实现效果:服务器等待客户端的连接,然后开始聊天。(理想的效果应该是服务器做echo,客户端和客户端聊)。

注意事项:内部类是动态的,main函数是静态的,不能直接在main中new一个内部类,需要实例化main所在的类。

 

服务器:

package wanghm;

import java.io.*;
import java.net.*;
import java.util.Scanner;


public class HelloWorld {

	public class ReceiveAgent implements Runnable {

		Socket socket;
		
		ReceiveAgent(Socket skt){
			socket = skt;
		}
		
		@Override
		public void run() {
			try {
				InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
				BufferedReader reader = new BufferedReader(ipr);
				String msg;
				while(true) {
					msg = reader.readLine();
					System.out.println("Receive: " + msg);
					if(msg.equalsIgnoreCase("over"))break;
				}
				reader.close();
				socket.close();
			} catch(Exception ex) {
				ex.printStackTrace();
			}
			
		}
	}
	
	public void go() {
		try {
			ServerSocket serverSocket = new ServerSocket(50001);
			while(true) {
				System.out.println("Server waiting...");
				Socket s = serverSocket.accept();
				System.out.println("Server accept: " + s.getPort());
				
				Thread thread = new Thread(new ReceiveAgent(s));
				thread.start();
				
				PrintWriter pw = new PrintWriter(s.getOutputStream());
				
				String message;
				Scanner scanner = new Scanner(System.in);
				while(true) {
					message = scanner.nextLine();
					pw.println(message);
					pw.flush();	
					if(message.equalsIgnoreCase("over"))break;
				}
				pw.close();
				s.close();
			}
			
		}
		catch(Exception ex) {
			ex.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new HelloWorld().go();
		
	}
	
}

客户端

package wanghm;

import java.net.*;
import java.util.Scanner;
import java.io.*;

public class SocketClient {
	
	public class ReceiveAgent implements Runnable {

		Socket socket;
		
		ReceiveAgent(Socket skt){
			socket = skt;
		}
		
		@Override
		public void run() {
			try {
				InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
				BufferedReader reader = new BufferedReader(ipr);
				String msg;
				while(true) {
					msg = reader.readLine();
					System.out.println("Receive: " + msg);
					if(msg.equalsIgnoreCase("over"))break;
				}
				reader.close();
				socket.close();
			} catch(Exception ex) {
				ex.printStackTrace();
			}
			
		}
	}
	
	public void go() {
		try {
			Socket socket = new Socket("127.0.0.1", 50001);
			System.out.println("Client connecting...");
			
			Thread thread = new Thread(new ReceiveAgent(socket));
			thread.start();
			
			PrintWriter pw = new PrintWriter(socket.getOutputStream());
			
			String message;
			Scanner scanner = new Scanner(System.in);
			while(true) {
				message = scanner.nextLine();
				pw.println(message);
				pw.flush();	
				if(message.equalsIgnoreCase("over"))break;
			}
			pw.close();
			socket.close();
			
		} catch(Exception ex) {
			ex.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new SocketClient().go();
		

	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值