您的位置:首页 > 编程语言 > Java开发

知识点整理之Java Socket

2015-04-17 09:01 411 查看
依旧是自己平时用到的一些东西的整理

 

Socket客户端:

public class SocketClient {

	public static void main(String[] args) {
		Socket socket = null;
		OutputStream out = null;
		InputStream in = null;
		
		try {
			socket = new Socket();
			// connect and set timeout
			socket.connect(new InetSocketAddress("127.0.0.1",8333), 2000);
			in = socket.getInputStream();
			out = socket.getOutputStream();
			out.write("abcd".getBytes());
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				in.close();
				out.close();
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

Socket服务器端:

public class SocketServer {

	public static void main(String[] args) {
		
		try {
			// 实例化sSocket,参数为端口号port
			ServerSocket serverSocket = new ServerSocket(8333);
			while (true) {
				// 实例化Socket
				Socket socket = serverSocket.accept();
				// 新建线程TCPServer,并启动
				new Thread(new ServerSocketTask(socket)).start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

public class ServerSocketTask implements Runnable {
	
	private Socket socket;
	
	public ServerSocketTask(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		// 定义输出流
		OutputStream output = null;
		// 定义输入流
		InputStream input = null;

		try {		

			// 初始化输入流
			input = this.socket.getInputStream();
			// 初始化输出流
			output = socket.getOutputStream();

			String message = null;
			
			while (true) {
				// 定义byte[]数组,大小为1024;
				byte[] buf = new byte[1024];
				// 从输入流中读取输入存入字节数组
				int len = input.read(buf);
				// 将字节数组转换成字符串
				message = new String(buf,0,len);
				//* 实际使用中这里要用System.arrayCopy把byte数组拼起来,判断到结束条件后再break
				System.out.println(message);
				// 向输出流写入SUCCESS返回给客户端
				output.write("SUCCESS".getBytes());
				// 输出流flush
				output.flush();
				// 跳出循环
				break;
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: