`

黑马程序员--java基础复习--NET网络编程

 
阅读更多

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------

网络编程听起来非常高端大气上档次是不是,确实是这样的,网络编程目的就是指直接或间接地通过网络协议与其他计算机进行通讯。有了这个,从此我们不再孤独了。不孤独的前提是我们必须要能正确的用网络编程来连接到其他的计算机,那么

一、网络编程的基础知识

   目前网络模型分为C/S 和B/S两种,互联网技术的发展使得B/S构架越来越占主流,因为B/S架构不要求客户端计算机上拥有大量的数据支持,很多操作都是发给服务器处理的,对于越来越流行的手机客户端,这是相当有竞争力的。那不管是C/S 还是B/S架构,都存在服务器和客户端,服务器一直监听客户端的请求,当监听到一个请求的时候,就做相应的处理(开启一个线程来处理),监听线程继续监听;再来个客户端请求,就再建立一个线程来处理。

  在数据的传输中,有两种传输协议:TCP和DCP

  TCP:要求建立连接的可靠协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

   一般格式为:

 客户端:

  

Socket s = new Socket("ip 地址",12345);

 服务器(支持多客户端访问)

   

ServerSocket ss = new ServerSocket(12345);
		
		while(true){
			Socket s = ss.accept();
			new Thread(new PicThread(s)).start();
		}	

 UDP:一种无连接的协议,每个数据包都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 每个数据包最大的大小为64K。因为数据包上已经封装了目的地的详细信息,所以不需要建立连接,因为不建立连接,所以该协议可能会丢失数据,UDP协议常用于视频、聊天、视频会议、网络教学等,因为效率。

一般格式为

 发送端:发送端定义的数据包是用来发送的,必须带有目的地的详细信息

 

DatagramSocket ds = new DatagramSocket(); 
DatagramPacket dp = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getLocalHost(), 8888);
				ds.send(dp);

 

 接收端:接收端定义的数据包是用来存放接收到是数据的,可定义大小。

 

 

 

 

DatagramSocket ds = new DatagramSocket(8888)
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(ap)

 二、网络编程中的URL

在java中的net包里边还给我们提供了URL类,这个类有很多的作用在处理一个诸如http://www.baidu.com

的网络地址时,就可以先将这个地址创建为一个URL类,然后通过这个类的方法分别获得所需要的信息,比如:

    public String getProtocol() 获取该URL的协议名。
    public String getHost() 获取该URL的主机名。
    public int getPort() 获取该URL的端口号,如果没有设置端口,返回-1。
    public String getFile() 获取该URL的文件名。
    public String getRef() 获取该URL在文件中的相对位置。
    public String getQuery() 获取该URL的查询信息。
    public String getPath() 获取该URL的路径
    public String getAuthority() 获取该URL的权限信息
    public String getUserInfo() 获得使用者的信息
    public String getRef() 获得该URL的锚

 

还可以通过这个URL地址来与目标创建连接,读取网络资源

InputStream openStream();

URLConnection openConnection()

 

URLConnection 类中提供了获取输出流和读取流的方法,可以通过这些方法来获得连接参数(先写在这里,具体用处还需要学习WEB了才能更熟悉)。

 

下面粘贴下自制的服务器与浏览器,是仿照毕向东老师的视频做的

服务器:

import java.io.*;
import java.net.*;

public class ServerDemo
{
	public static void main(String[] args) throws Exception{
		ServerSocket ss = new ServerSocket(13000);
		System.out.println(ss.getInetAddress().getHostAddress());
		
		Socket s = ss.accept();//这个服务器只服务一次
		InputStream in = s.getInputStream();//获得读取流,可以读取客户端的请求信息
		PrintWriter pw = new PrintWriter(s.getOutputStream(), true);//获得输出流,并封装成PrintWriter,可以向
																	//客户端发信息哦

		byte[] buf = new byte[1204];
		in.read(buf);

		System.out.println(new String(buf));//打印客户端请求信息

		pw.println("<font size = '6' color = 'green'>xxxx 你好</font>");//向客户端回应一点东西

		s.close();

		ss.close();
	}
}

 浏览器端(客户端端)这里边就是创建了一个图形化界面,然后再按钮事件中加入了解析我们山寨URL地址的一些代码,可以访问我们山寨的服务器

package exercise;

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class MyBrowser {
	private Frame f;
	private TextField tf;
	private Button but;
	private TextArea ta;
	private Container con;
	public static void main(String[] args) {
		new MyBrowser();
	}
	
	public MyBrowser(){
		init();
	}
	
	public void init(){
		f = new Frame("刘旺民 1.1");
		tf = new TextField("www.google.com");
		but = new Button("转到");
		ta = new TextArea();
		con = new Container();
		
		f.setBounds(300, 300, 500, 400);
		tf.setColumns(50);
		con.setLayout(new FlowLayout());
		con.add(tf);
		con.add(but);
		con.setVisible(true);
		f.add(con, BorderLayout.NORTH);
		f.add(ta);
		
		f.setVisible(true);
		
		myEvent();
	}
	
	public void myEvent(){
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				Socket s = null; 
				try {
					ta.setText("");
					String str1 = tf.getText();
					int index = str1.indexOf("//");
					str1 = str1.substring(index +2);
					String[] strs = str1.split(":");
					s = new Socket(strs[0], Integer.parseInt(strs[1]));//关键在这里,连上山寨的服务器
					PrintWriter out = new PrintWriter(s.getOutputStream(), true);//发送客户端请求信息
					out.println("GET " + str1 + " HTTP/1.1");//发送客户端请求信息
					out.println("Host: localhost:13000");//发送客户端请求信息
					out.println("Connection: keep-alive");//发送客户端请求信息
					out.println("Accept-Encoding: gzip,deflate,sdch");//发送客户端请求信息
					out.println("Accept-Language: zh-CN,zh;q=0.8");//发送客户端请求信息
					out.println("Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3");//发送客户端请求信息
					
					out.println();					
					out.println();					
					out.println();
					
					InputStream in = s.getInputStream(); //获得服务器返回信息的读取流
					byte[] buf = new byte[1024*1024];
					
					int len = in.read(buf);
					
					String str = new String(buf, 0, len); //获得的返回信息
					ta.setText(str + "\r\n");//将返回信息显示到文本区域
					ta.append(str1);
					
				} catch (UnknownHostException e1) {
					e1.printStackTrace();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});
	}

}


 运行结果:

 服务器端--黑窗口:



 

浏览器端:



 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

  • 大小: 23.3 KB
  • 大小: 40.4 KB
0
1
分享到:
评论

相关推荐

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

    《黑马程序员Java面试宝典》是一本...通过《黑马程序员Java面试宝典》的学习,你可以系统地复习和掌握这些知识点,提高自己的面试竞争力。书中的问题和解答将帮助你更好地理解Java编程的本质,提升在面试中的自信心。

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    第二章讲解了Java编程基础,包括关键字(如"class")、注释类型(单行、多行和文档注释)、数据类型(如基本数据类型和引用数据类型),以及条件判断和循环结构中的`break`和`continue`语句的使用。 第三章进一步...

    Java基础教程(第3版)_ppt.rar

    《Java基础教程(第3版)_ppt.rar》是一个包含多个PPT文件的压缩包,主要用于教学目的,提供了关于Java编程语言的基础知识。这个资源涵盖了Java的核心概念,从基本的类和对象到高级特性如多线程和数据库操作。以下是...

    Java-集合的例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    本资料包是黑马程序员提供的详细教程,涵盖了Java集合的例题、源码以及配套的PPT教学文档,旨在帮助学习者深入理解和掌握Java集合的使用。 首先,我们来探讨Java集合框架的基本概念。Java集合框架包括接口和实现类...

    黑马程序员面试宝典(java).7z

    《黑马程序员面试宝典》是针对Java开发人员的一份综合性的面试准备资料,它涵盖了Java全栈开发中的关键知识点,并且特别强调了在面试中可能会遇到的问题和解答。这份资源包含了一份超过500页的企业面试真题集,旨在...

    黑马程序员入学测试题

    【标题】:“黑马程序员入学测试题”是一份用于评估编程基础和理解能力的测试集,主要针对准备加入黑马程序员培训课程的学生。这份测试题旨在帮助新手程序员检验自己的知识水平,以便更好地适应学习环境。 【描述】...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机执行一系列任务的过程。 2. **Java语言概述,历史、特点** - **概述**:Java是一种...

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

    黑马程序员提供的"Java基础辅导班教程课件[第01期]第12天"旨在帮助学员深入理解Java语言的核心概念,进一步提升编程技能。在这个阶段的学习中,学员将接触到Java的高级特性以及实际应用。 首先,"day12"这个目录很...

    黑马程序员JAVA面试宝典2018年5月最新版

    《黑马程序员JAVA面试宝典2018年5月最新...总的来说,《黑马程序员JAVA面试宝典2018年5月最新版》是一本全面覆盖Java开发各方面的面试准备书籍,它能够帮助Java开发者系统地复习和提升技能,以应对日益激烈的竞争环境。

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

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    2018-2019年黑马最新版Java程序员面试宝典+题库pdf

    《2018-2019年黑马最新版Java程序员面试宝典+题库pdf》是一份集合了近年来Java编程领域重点知识和面试常见问题的综合资源。这份资料主要针对初级Java程序员,旨在帮助他们巩固基础知识,掌握面试技巧,以便在求职...

    java黑马基础资料+本人自己整理笔记+哔哩哔哩+java入行者 和 复习者可以观看第一次发作品 请多多提建议

    本文将为你提供一份详尽的Java基础知识概述,适合初学者和有经验的开发者作为复习材料。 1. Java基础语法 Java的基础语法是编程的基础,理解和掌握它至关重要。 1.1 注释 注释是程序员为了方便理解和维护代码而...

    传智播客-黑马32期Java视频

    【标签】"java,黑马" 标签明确了主题,"java"代表课程内容专注于Java编程,包括语法、面向对象编程、异常处理、集合框架、多线程、I/O流、网络编程等核心概念。而"黑马"则与传智播客的黑马程序员系列课程相关,意味...

    javaweb复习资料,黑马程序员视频

    JavaWeb是Java编程领域的一个重要方向,主要用于构建Web应用程序。这个复习资料主要涵盖了Eclipse的使用、程序的断点调试、Eclipse常用快捷键、JUnit测试框架、Java 5的新特性(静态导入和自动装箱拆箱)以及增强for...

    黑马程序员资料参考.docx

    北京黑马程序员培训是一家专注于IT技术教育的机构,提供多种编程语言和互联网技术的课程,包括JAVA、Android和IOS等方向。该机构致力于帮助学员提升技能,实现职业发展。以下是关于北京黑马培训的一些详细信息: ...

    程序员复习系统全面.zip

    总的来说,"程序员复习系统全面.zip"是一个全面的资源库,旨在帮助程序员巩固基础,提升技术广度和深度,同时也提醒我们在忙碌的工作中不应忽视基础知识的学习和更新。通过系统地复习这些内容,不仅可以为面试做好...

    黑马java面试题总结

    Java编程语言作为软件开发领域的重要角色,其面试题往往涵盖了广泛的知识点,包括但不限于基础知识、数据结构、算法、多线程、集合框架、IO流、网络编程、设计模式以及框架应用等。"黑马java面试题总结"很可能是一个...

    java视频教程_黑马Java零基础辅导班[第二期]11天课件源码

    《Java编程学习之旅:黑马Java零基础辅导班[第二期]11天课件源码解析》 在Java开发的世界里,扎实的基础是每一位程序员的基石。本篇将围绕"java视频教程_黑马Java零基础辅导班[第二期]11天课件源码"这一主题,深入...

    《JavaWeb程序设计任务教程(第2版)》(Java):课后答案-docx文档

    自学者:对于自学Java Web编程的爱好者,这份答案文档可以作为一个很好的参考资料,帮助他们解决学习过程中的疑惑。 三、使用场景 课后复习:学生在完成课后习题后,可以使用这份答案文档进行自查,找出自己的不足...

Global site tag (gtag.js) - Google Analytics