`
xiao1zhao2
  • 浏览: 38968 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java网络编程基础:TCP

阅读更多
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();
						}
					}
				}

 

 

0
2
分享到:
评论
1 楼 cywhoyi 2015-08-02  
加点难度,如何解决拆包、粘包

相关推荐

    Java网络编程 TCP协议 聊天室

    先运行服务器 再运行客户端 希望对你们有帮助 希望在此基础上加以改进后 您再传上来 供大家分享

    Java核心编程技术源码

    《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...

    Java高手真经 编程基础卷.part1.rar

    《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...

    Java高手真经 编程基础卷.part3.rar

    《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...

    Java高手真经 编程基础卷.part4.rar

    《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...

    Java高手真经 编程基础卷.part2.rar

    《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...

    java网络编程基础知识

    java网络编程基础知识,TCP/IP协议,Socket编程

    Java基础篇:网络编程.pdf

    该文档主要整理了Java网络编程相关的内容,主要包括通信要素、TCP网络编程、UDP网络编程以及URL编程的相关内容及示例代码

    635.633.JAVA基础教程_反射-复习:TCP、UDP、URL网络编程(635).rar

    635.633.JAVA基础教程_反射-复习:TCP、UDP、URL网络编程(635).rar

    Java网络编程(第3版) 中文版

    无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...

    java 网络编程tcp/ip

    java 网络编程tcp/ip,chm格式,很基础很重要的东西

    java技能总结.docx

    掌握Java网络编程:掌握Java网络编程的相关技术,如Socket、UDP、TCP、IP等,能够进行网络通信和网络编程。 掌握Java安全性编程:掌握Java安全性编程的相关技术,如加密解密、数字签名、权限管理等,能够保障应用...

    Java网络编程&Tomcat7&MyEclipse10

    附件包含Java网络编程基础详解,如UDP发送端接收端聊天、TCP客户端服务端上传下载等。关于Tomcat7绿色版下载安装,MyEclipse10安装及部署Tomcat,见我的博文:...

    JAVA网络编程.第3版.哈诺德著.扫描版.含源码

    本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDPsocket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...

    java网络编程技术课程设计.doc

    比如166.111.136.3 , 166.111.52.80 主机名(hostname):网络地址的助记名,按照域名进行分级管理。 端口号(port number):网络通信时同一机器上的不同进程的标识。 服务类型(service):网络的各种服务。 在Internet...

    java网络编程原理与jsp web开发核心技术 part2

    本书是目前电子资源中比较基础的一本,适合具备初步计算机网络知识(例如TCP/IP网路五层模型)的读者快速理解网络编程原理和JSP的核心技术,进而快速上手开发。 本书的作者撰写是相当用心和仔细的,各知识点都有比较...

    Java基础[07-网络编程].ppt

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用...

    java 网络编程

    讲述了网络的一些基础知识,和java的网络编程的相关知识!

    Java初级开发面试题

    Java基础知识:语法、面向对象编程、集合、多线程、异常处理等。 Java高级特性:反射、泛型、枚举、注解、 Lambda表达式等。 Java虚拟机:Java内存模型、垃圾回收、类加载机制等。 常见的Java框架:Spring、...

    14.尚硅谷_java基础_网络编程

    TCP/IP 编程基础 URL & URLConnection

Global site tag (gtag.js) - Google Analytics