socket通信之单client端

Server端代码

package wbf.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String[] args) {
		ServerSocket server = null;
		Socket socket  = null;
		InputStream input = null;
		OutputStream output = null;
		try {
			System.out.println("socket启动,等待客户端连接。。。");
			
			//启动server端,等待客户端连接
			server = new ServerSocket(9999);
			socket = server.accept();
			
			//接收client端发送的消息
			input = socket.getInputStream();
			byte[] bytes = new byte[1024];
			int len;
			StringBuilder builder = new StringBuilder();
			while ((len = input.read(bytes)) != -1) {
				System.out.println("读到的消息:" + new String(bytes, 0, len, "UTF-8"));
				builder.append(new String(bytes, 0, len, "UTF-8"));
			}
			System.out.println(builder);
			
			//接收到client消息后,作出回复
			//当前状态下,OutputStream需要关闭,否则client端接收消息时无法知道server的回复消息是否已经结束,会死循环等待
			output = socket.getOutputStream();
			output.write("你好client,我是server".getBytes("UTF-8"));
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (output != null) {
				try {
					output.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (input != null) {
				try {
					input.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (socket != null) {
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (server != null) {
				try {
					server.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

Client端代码

package wbf.socket;

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

public class Client {
	public static void main(String[] args) {
		Socket socket = null;
		OutputStream output = null;
		InputStream input = null;
		try {
			//连接server端,并通过OutputStream想server端发送第一条消息
			socket = new Socket("localhost", 9999);
			System.out.println("client连接成功。");
			output = socket.getOutputStream();
			output.write("你好server,我是client".getBytes("UTF-8"));
			
			//通过该方法,告诉server端消息已经发送完毕,server端就停止接收消息
			socket.shutdownOutput();
			
			//client端发送完消息后,启动InputStream等待接收server端的消息
			input = socket.getInputStream();
			byte[] bytes = new byte[1024];
			int len;
			StringBuilder builder = new StringBuilder();
			while ((len = input.read(bytes)) != -1) {
				builder.append(new String(bytes, 0, len, "UTF-8"));
			}
			System.out.println(builder);
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (input != null) {
				try {
					input.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (output != null) {
				try {
					output.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (socket != null) {
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

猜你喜欢

转载自my.oschina.net/wangbaofeng/blog/1824970