`
baiqian
  • 浏览: 38454 次
  • 性别: Icon_minigender_2
  • 来自: 河南
社区版块
存档分类
最新评论

黑马程序员—java基础—网络编程

阅读更多

---------------------- android培训java培训、期待与您交流! ----------------------

 

 

网络编程:

网络通讯要素:

IP地址(InetAddress对象),端口号,传输协议(常用的是TCPUDP)

UDP:(聊天、网络视频会议……就是采用UDP,数据不重要只求速度快)

将数据及源和目的封装成数据包中,不需要建立连接

每个数据报的大小在限制在64K

因是无连接的,所以是不可靠协议

不需要连接,速度快

TCP:

建立连接,形成传输数据的通道

在连接中进行大数据量传输

通过三次握手完成连接,是可靠协议

必须建立连接,效率会稍低

Socket:

它是为网络服务提供的一种机制,

网络的两端都要有Socket

网络通信其实就是Socket间的通信

数据在两个Socket间通过IO传输

UDP:

创建发送UDP的流程:

1、建立UDPSocket服务通过DatagramSocket对象

2、提供数据,并将数据封装到数据包中

DatagramPacket(byte[] buf,int length,InetAddress address,int port)

3、通过Socket服务的发送功能,将数据发送出去通过send()方法

4、关闭资源。close()方法

创建接收UDP的流程:

1、定义UDPSocket服务通过DatagramSocket对象

通常会监听一个端口。其实就是给这个接收网络应用程序定义数据标识。

2、定义一个数据包(DatagramPacket(byte[] buf,int length)

3、通过socket服务的receive()方法将收到的数据存入已定义好的数据包中

4、通过数据包对象的特有功能,将这些不同的数据取出。打印在控制台上

5、关闭资源

Socket与线程结合就能完成聊天小程序。

TCP:

TCP传输采用Socket(客户端对象)ServerSocket(服务端对象)

Socket:

1、创建客户端的Socket服务,指定目的主机的端口

Socket socket=new Socket("172.18.70.136",8888);

2、为了发送数据,应该获取socket流中的输出流

OutputStream out=socket.getOutputStream();

ServerSocket端:

1、创建服务器端的Socket服务,并监听一个端口。ServerSocket();

2、获取连接过来的客户端对象,通过ServerSocketaccept方法,没有连接就会等,这个方法是阻塞式的。

3、客户端如果发过来数据,服务端要使用对应的客户端对象 ,并获取到该客户端对象的读取流来该读取发过来的数据,并打印在控制台。

4、关闭服务端(可选)

 

该例子出现的问题解析:

 

public class TransClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket=new Socket("172.18.70.136",10000);
		//键盘输入数据信息
		BufferedReader keyIn=
			new BufferedReader(new InputStreamReader(System.in));
		//发向服务器端的输出流
		BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		//接收从服务器端过来的输入流
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		/**
		 * 这里可以将bufferedReader替换成PrintWriter可以省去了newLine()和flush();
		 * PrintWriter in=new PrintWriter(new InputStreamWriter(socket.getInputStream()));
		 */
		String line=null;
		while((line=keyIn.readLine())!=null){
			if("886".equals(line)){
				break;
			}
			out.write(line);
			//不能少了回车和刷新
			out.newLine();
			out.flush();
			String message=in.readLine();
			System.out.println("服务器说:"+message);
			
		}
		
		keyIn.close();
		socket.close();
		
	}
}
public class TransServer {
	public static void main(String[] args) throws IOException {
		ServerSocket serverSocket=new ServerSocket(10000);
		Socket socket=serverSocket.accept();
		String ip=socket.getInetAddress().getHostAddress();
		System.out.println(ip);
		//从客户端接收过来的输入流
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		//发向客户端的输出流
		BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		
		String line=null;
		while((line=in.readLine())!=null){
			out.write(line.toUpperCase());
			out.newLine();
			out.flush();
			//String message=in.readLine();
		}
		socket.close();
		serverSocket.close();
	}
}

 

 

1、因为客户端和服务端都有阻塞式方法,方法没有读到结束标记就一直等

2、因为数据接收到后都在缓冲区,所以要刷新才能真正的写出来,必须flush();

  只要用到缓冲区就要记得刷新。bufferWriter.flush();

 

上传图片例子:

 

public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket s=new Socket("172.18.70.136",10003);
		OutputStream os=s.getOutputStream();
		
		FileInputStream fis=new FileInputStream("20111026214905.png");
		int len=0;
		byte[] data=new byte[1024];
		while((len=fis.read(data))!=-1){
			os.write(data, 0, len);
		}
		s.shutdownOutput();
		
		InputStream is=s.getInputStream();
		byte[] num=new byte[1024];
		int lens=is.read(num);
		System.out.println(new String(num,0,lens));
		
		fis.close();
		s.close();
	}
}

public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket ss=new ServerSocket(10003);
		Socket s=ss.accept();
		InputStream is=s.getInputStream();
		
		FileOutputStream fos=new FileOutputStream("1.png");
		byte[] data=new byte[1024];
		int len=0;
		while((len=is.read(data))!=-1){
			fos.write(data, 0, len);
		}
		
		OutputStream os=s.getOutputStream();
		os.write("上传成功!".getBytes());
		
		fos.close();
		s.close();
		ss.close();
	}
}

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

分享到:
评论

相关推荐

    黑马程序员Java函数式编程全套视频教程,Lambda表达式、Stream流、函数式编程一套全通关1

    本套黑马程序员的Java函数式编程视频教程涵盖了Lambda表达式、Stream流以及函数式编程的核心概念,旨在帮助学习者全面掌握这一现代编程技术。 Lambda表达式是Java 8引入的关键特性,它允许我们以更简洁的方式定义...

    黑马程序员java基础试题、笔记

    "黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案

    黑马程序员JAVA WEB全笔记pdf

    本笔记基于黑马程序员的课程内容,全面覆盖了Java Web的基础知识,包括前端开发技术如HTML、CSS、JavaScript,以及后端服务器端的Java Servlet和JSP(Java Server Pages)。 一、前端基础 1. ...

    黑马程序员java面试宝典 完整版PDF.rar

    《黑马程序员Java面试宝典》是一本专门为Java开发者准备的面试指南,包含了广泛而深入的Java技术知识,以及面试过程中可能会遇到的各种问题。这本书的完整版PDF提供了丰富的学习材料,帮助求职者提升自己的技术水平...

    黑马程序员_Java基础辅导班教程课件[第01期]第15天

    《黑马程序员_Java基础辅导班教程课件[第01期]第15天》是针对初学者设计的一堂深入浅出的Java...通过深入学习和实践这些知识点,学员将能够构建起坚实的Java编程基础,为后续的进阶学习和实际项目开发奠定坚实的基础。

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    黑马程序员Javase笔记

    Java是世界上最流行的编程语言之一,尤其在...总结来说,"黑马程序员Javase笔记"涵盖了Java的基础语法、内存管理、面向对象编程、集合框架以及泛型和Map等内容,这些都是成为一名合格Java开发者必须掌握的核心知识。

    黑马程序员_java8新特性详解笔记和源码

    Java 8是Java语言发展的一个重要里程碑,引入了许多创新性的特性和改进,...黑马程序员的Java8新特性详解笔记和源码提供了深入学习这些概念的资源,结合实际的代码示例,将有助于你更好地理解和掌握Java 8的核心特性。

    黑马程序员Java基础视频辅导班Day01

    ### 黑马程序员Java基础视频辅导班Day01知识点总结 #### Java的跨平台特性与JVM 1. **Java的跨平台性**:Java语言能够实现跨平台运行的关键在于Java虚拟机(JVM),即Java代码可以在任何安装了对应JVM的操作系统上...

    黑马程序员Java基础视频辅导班Day02

    总的来说,"黑马程序员Java基础视频辅导班Day02"的内容主要是Java编程的基础,包括常量的定义、变量的声明和初始化,以及各种运算符的使用,这些都是编写Java程序不可或缺的知识。通过深入理解和掌握这些概念,可以...

    黑马程序员_(适合初学者入门的Java基础视频)

    "黑马程序员_(适合初学者入门的Java基础视频)"是一套专为初学者设计的Java基础教学课程,旨在帮助零基础的学习者逐步掌握Java编程的基本概念和技能。 该视频教程涵盖了Java的基础知识,包括: 1. **环境搭建**:...

    黑马程序员_Java基础辅导班教程课件[第01期]第14天

    "黑马程序员"作为知名的IT培训机构,提供了丰富的Java基础辅导课程,旨在帮助初学者快速掌握Java编程技能。本教程的第14天课程,主要涵盖了Java语言的基础知识,为学员巩固编程基础提供有力支持。 在Java开发教程中...

    2018年黑马程序员全套教程java基础第1天笔记+讲义

    《2018年黑马程序员全套教程java基础第1天笔记+讲义》是一份针对初学者精心编排的Java编程教程,旨在帮助新手快速掌握Java编程的基础知识。本教程结合了JDK9的新特性以及IntelliJ IDEA的实用技巧,为学习者提供了一...

    黑马程序员java贪吃蛇源码

    《黑马程序员Java贪吃蛇源码解析》 贪吃蛇是一款经典的计算机游戏,它简单易懂,却又富有挑战性,是许多程序员初次接触编程时的启蒙之作。在Java编程领域,贪吃蛇同样是一个很好的实践项目,能帮助初学者理解和掌握...

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...

    教材源码_javaweb_黑马程序员Javaweb源码_

    JavaWeb是Java编程领域中的一个重要组成部分,主要涉及Web应用程序的开发和实现。黑马程序员是一家知名的IT教育机构,他们提供的Javaweb教材源码是为了帮助学员深入理解和实践Web开发技术。下面将详细介绍JavaWeb的...

    《Java基础入门》-课后习题答案.doc

    四、Java 编程基础 * Java 程序的基本结构包括类、main 方法、变量声明、语句执行等。 * Java 中的注释有单行注释、多行注释、文档注释等。 * Java 中的控制流语句有 if 语句、switch 语句、while 语句、for 语句等...

Global site tag (gtag.js) - Google Analytics