Socket之服务器和客户端通讯

一.服务器端:

package com.chen.servier;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Time;
import java.util.Timer;
import java.util.TimerTask;

public class SocketServer {
	
	BufferedWriter bufferedWriter;
	BufferedReader reader ;

	/** 
	 * @Title: main 
	 * @Description: TODO(这里用一句话描述这个方法的作用) 
	 * @param @param args    设定文件 
	 * @return void    返回类型 
	 * @throws 
	 */
	public static void main(String[] args) {
		SocketServer socketServer =new SocketServer();
		socketServer.StartServer();

	}
	
	public void StartServer(){
		
		
		Socket socket =null;
		

		try {
			@SuppressWarnings("resource")
			ServerSocket serverSocket = new ServerSocket(9898);
			System.out.print("Server start");
			while(true){
				socket =serverSocket.accept(); //阻塞状态  代码会在这行停住,等待客户端接入
				manageConnection(socket);
			}
		     
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			
			try {
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				reader.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}	
		}
	}
	
	public void manageConnection(final Socket socket){
		
		new Thread(new Runnable() {  //创建个子线程处理
			
			@Override
			public void run() {
				try {
					System.out.print("client"+socket.hashCode()+"connedted"+"\n");
					reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
					String receivedMsg;
					while ((receivedMsg =reader.readLine())!=null) {
						
						System.out.print("client"+socket.hashCode()+":"+receivedMsg);
						bufferedWriter.write("server回复消息,client给我发的消息是:"+receivedMsg+"\n");
						bufferedWriter.flush();
					}
				} catch (Exception e) {
					
				} finally{
					try {
						reader.close();
						bufferedWriter.close();
						
					} catch (Exception e2) {
						
					}			
				}					
				}
			
		}).start();
	}

}
二.客户端:

package com.chen.client;

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 SocketClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		SocketClient client = new SocketClient();
		client.start();

	}

	public void start() {
		BufferedReader inputReader = null; // 从控制读取数据
		BufferedReader reader = null;// 从socket读取数据
		BufferedWriter writer = null;
		Socket socket = null;

		String inputContent;
		try {
			socket = new Socket("127.0.0.1", 9898);
			writer = new BufferedWriter(new OutputStreamWriter(
					socket.getOutputStream()));
			inputReader = new BufferedReader(new InputStreamReader(System.in));
			
			startServerRepleyListener(reader); //启动子线程
			
			reader = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));

			while (!(inputContent = inputReader.readLine()).equals("bye")) {

				writer.write(inputContent + "\n");
				writer.flush();// 强制提交内存里面还没有提交的内容

				String response = reader.readLine();
				System.out.print(response);

			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				inputReader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

	public void startServerRepleyListener(final BufferedReader reader) {
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				String response;
				try {
					while((response=reader.readLine())!=null){
						System.out.print(response);
						
					}
				} catch (IOException e) {
					
					e.printStackTrace();
				}

			}
		});
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值