首页 > 编程语言 > 详细

java网络编程基础:TCP

时间:2015-08-02 02:08:02      阅读:252      评论:0      收藏:0      [点我收藏+]
1、TCP特点

????Transmission Control Protocol 传输控制协议
????面向连接,通过三次握手建立连接,可靠的协议

??? 有明确的客户端和服务器端
????一旦连接可以将数据当做一个双向字节流进行交换,开销大

?
2、相关类
Socket 客户端Socket服务类
ServerSocket 服务器端Socket服务类
?
3、TCP传输示例代码
				// 客户端
				public class Client {

					public static void main(String[] args) throws IOException {

						// 1:使用Socket对象,创建客户端Socket服务
						Socket socket = new Socket("127.0.0.1", 20000);

						// 2:通过连接建立数据传输通道,通过Socket对象可以获得通道中的输入输出流对象
						OutputStream out = socket.getOutputStream();
						InputStream in = socket.getInputStream();

						// 3:使用输入输出流,读写数据
						out.write("Hello World".getBytes());

						byte[] b = new byte[1024];
						int length = in.read(b);
						String message = new String(b, 0, length);
						System.out.println(message);

						// 4:关闭Socket服务
						socket.close();
					}
				}
				// 服务器端
				public class Server {

					public static void main(String[] args) throws IOException {
						
						// 1:通过ServerSocket对象,创建服务器端Socket服务,必须设置端口号
						ServerSocket server = new ServerSocket(20000);

						// 2:获取连接的客户端的Socket对象,accept是阻塞方法
						Socket socket = server.accept();

						// 3:通过Socket对象获得输入输出流进行读写数据
						InputStream in = socket.getInputStream();
						OutputStream out = socket.getOutputStream();

						byte[] b = new byte[1024];
						int length = in.read(b);
						String message = new String(b, 0, length);
						System.out.println(message);

						out.write("收到".getBytes());

						// 4:关闭客户端、服务器端的服务
						socket.close();
						server.close();
					}
				}

?

??注意,阻塞式方法需要结束标记,否则容易造成双方同时等待可以通过Socket.shutdownInput(),Socket.shutdownOutput()通知对方.

?

4、实现文件上传
				// 客户端
				public class UploadClient {

					public static void main(String[] args) throws Exception {

						// 建立Socket服务
						Socket socket = new Socket("192.168.1.100", 20000);

						// 建立文件及流对象
						File file = new File("src/com/net/upload/a.jpg");
						FileInputStream fis = new FileInputStream(file);
						OutputStream out = socket.getOutputStream();

						// 通过流上传文件
						byte[] bur = new byte[1024];
						int length = 0;
						while ((length = fis.read(bur)) != -1) {
							out.write(bur, 0, length);
						}
						fis.close();

						// 发送完毕,关闭Socket的输出流
						socket.shutdownOutput();

						// 接收结束信息
						InputStream in = socket.getInputStream();
						byte[] message = new byte[1024];
						length = in.read(message);
						System.out.println(new String(message, 0, length));

						// 关闭Socket服务
						socket.close();
					}
				}

				// 服务器端
				public class UploadServer {

					public static void main(String[] args) throws IOException {

						ServerSocket server = new ServerSocket(20000);
						while (true) {
							Socket socket = server.accept();
							new Thread(new Upload(socket)).start();
						}
					}
				}

				// 上传任务类
				class Upload implements Runnable {

					private Socket socket;

					public Upload(Socket socket) {
						this.socket = socket;
					}

					@Override
					public void run() {
						try {

							String ip = socket.getInetAddress().getHostAddress();

							// 建立文件及流对象
							InputStream in = socket.getInputStream();
							File file = new File("src/com/net/upload/" + ip + "a.jpg");
							FileOutputStream fos = new FileOutputStream(file);

							// 接收文件
							byte[] bur = new byte[1024];
							int length = 0;
							while ((length = in.read(bur)) != -1) {
								fos.write(bur, 0, length);
							}
							fos.close();

							// 向客户端返回上传完毕消息
							OutputStream out = socket.getOutputStream();
							out.write("上传完毕".getBytes());

							// 关闭Socket服务
							socket.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}

?

?

java网络编程基础:TCP

原文:http://xiao1zhao2.iteye.com/blog/2232182

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!