黑马程序员——java高新技术——网络编程

点击打开链接 点击打开链接 点击打开链接 android培训、<a">点击打开链接 点击打开链接 java培训、期待与您交流!">点击打开链接 点击打开链接

网络编程

网络模型

l   OSI参考模型

l   TCP/IP参考模型

网络通讯要素

l   IP地址:网络中设备的标识,不易记忆,可用主机名,本地回环地址,127.0.0.1  主机名:localhost

l   端口号:用于标识进程的逻辑地址,不同进程的标识,有效端口:0~65535,其中0~1024系统使用或保留端口

l   传输协议:通讯的规则,常见协议:TCP、UDP

网络通讯的一般过程

1.找到对方IP

2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这个数字,叫做 端口,逻辑端口。0~65535

3.定义一个通信规则。这个通讯规则成为协议。国际组织定义了通用协议TCP/IP通信。UDP

InetAddress类:此类表示互联网协议(IP)地址

static InetAddress  | getLocalHost():获取本地主机

String  |   getHostAddress():返回IP地址字符串

String  |   getHostName():获取此IP地址的主机名

static InetAdress  |   getByAddress(byte[] addr):再给定原始IP地址的情况下,返回InetAddress对象

Static InetAddress  |  getByAddress(String host,byte[] addr):根据给定主机和IP地址创建InetAddress。

Static InetAddress  |  getByName(String host)在给定主机的情况下确定主机的IP地址。

static InetAddress[]  |  getAllBynames(String host):在给定主机名的情况下,根据系统上配置的名称服务返回其所组成的数组。

TCP和UDP

UDP:聊天,视频会议

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

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

因无连接,是不可靠协议

不需要建立连接,速度快

TCP:下载

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

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

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

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

UDP传输

DatagramSocket类:此类表示用来发送和接收数据报包的套接字。

构造函数:DatagramSocket(int port):指定端口

DatagramSocket():

重要方法:

void  |  send(DatagramPacket p):发送数据报包

void  |  receive(DatagramPacket p) :接收数据报包

DatagramPacket 类:此类表示数据报包。

构造函数:

DatagramPacket(byte[] buf,int length)

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

重要方法:

InetAddress  |  getAddress():返回此数据报将要发往该主机或者从该机器接收到的IP地址。

byte[]      |  getData():返回缓冲区数据

int       |  getLength():返回将要发生或接收到的数据的长度

int      |  getPort():获取此数据报将要发送往该主机或从该主机接收到的端口

通过UDP传输方式,将一段文字数据发送出去。

1.建立updSocket服务

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

3.通过socket服务的发送功能,将数据包发送出去

4.关闭资源

定义一个应用程序,用于接收UDP传输的数据并处理

1.定义udpSocket服务,通常会接收一个端口,其实就是给这个网络应用程序定义数字标识,方便于明确哪些数据过来该应用程序可以处理。

2.定义一个数据包,因为要存储接收到的数据,数据包对象中有更多功能可以提前字节数据中的不同数据信息。

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

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

5.关闭资源

UDP练习:

import java.util.*;
import java.io.*;
import java.net.*;
class UDP3
{
	public static void main(String[] args)
	{
		new Thread(new UDPSend3()).start();
		new Thread(new UDPReceive3()).start();
	}
}

class UDPSend3 implements Runnable
{
	public void run()
	{
      try
      {
		DatagramSocket ds=new DatagramSocket();

		//建立一个IO流接收数据
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

		for(String str=br.readLine();str!=null;str=br.readLine())
		{
                         byte[] buf=str.getBytes();
			 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1002);
			 ds.send(dp);
			 if("over".equals(str))
				 break;
		}
		ds.close();
      }
      catch (Exception e)
      {
		  System.out.println(e);
      }

	}
}

class UDPReceive3 implements Runnable
{
      public void run()
	{

	   try
	   {
		  DatagramSocket ds=new DatagramSocket(1002);
		 while(true)
		 {
			byte[] buf=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buf,buf.length);
			ds.receive(dp);
			String info=new String(buf,0,dp.getLength());
			System.out.println(dp.getAddress()+"::"+info);
			if("over".equals(info))
				break;
		 }
		 ds.close();
	   }
	   catch (Exception e)
	   {
		   System.out.println(e);
	   }
	}
}

TCP传输

Socket和ServerSocket

l 建立客户端和服务器端

l 建立连接后,通过Socket中的IO流进行数据的传输

l 关闭Socket

l 同样,客户端和服务器端是两个独立的应用程序。

Socket类:此类实现客服端套接字

常用构造函数:Socket()  Socket(InetAddress address,int port)  Socket()

常用方法:

Void | close():关闭此套接字

Void | connect(SocketAddress endpoint):将此套接字连接到服务器。

InetAdddress | getInetAddress():返回此套接字连接的地址

InputStream | getInputStream():返回此套接字的输入流

OutputStream | getOutputStream():返回此套接字的输出流

Int  | getPort():返回此套接字连接到的远程端口

Void | shutdownInput():此套接字的输入流置于“流的末尾”。

Void | shutdowmOutput():禁用此套接字的输出流。

ServerSocke此类实现服务器套接字

常用构造函数:ServerSocket()    ServerSocket(int port)

常用方法:

Socket | accept():侦听并接受到此套接字的连接

URL类:代表一个统一资源定位符,它是指向互联网“资源”的指针。

URL(String spec)

重要方法:

String | getFile():获取此URL的文件名

String | getHost():获取此URL的主机名

String | getPath():获取此URL的路径部分

String | getProtocol():获取此URL的协议名称

String | getQuery():获取此URL的查询部分

URLConnection | openConnection():返回一个表示到URL所引用的远程对象的连接。

InputStream | openStream():打开到此URL的连接并返回一个用于从该连接读入的InputStream。

URLConnection类:抽象类,代表应用程序和URL之间的通信连接。

重要方法:

InputStream | getInputStream():返回从此打开的连接读取的输入流

OutputStream | getOutputStream():返回写入到此链接的输入流。

客户端

通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机,因为TCP是面向连接的,所以在建立socket服务时,就要有服务端存在,并连接成功,形成通路后,在该通道进行数据的传输。

步骤:

1.创建socket服务,并指定要连接的主机和端口。

Socket(String host,int port);

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

getOutputStream()

Write()

3.关闭服务

服务端

1.建立服务端的socket服务,ServerSocket。

ServerSocket(int port)接听一个端口

2.获取连接过来的客服端对象。

通过accept()方法,获取Socket,没有连接就会等,所以这个方法是阻塞式的

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

4.关闭服务端(可选)

//TCP终极练习
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class  TCP
{
	private Frame f;
	private TextField tf;
	private Button bt;
	private TextArea ta;
	TCP()
	{
		init();
	}
	public void init()
	{
		f=new Frame("我的浏览器");
		f.setBounds(100,100,600,600);
		f.setLayout(new FlowLayout());

		tf=new TextField(60);
		bt=new Button("转到");
		ta=new TextArea(30,66);

		f.add(tf);
		f.add(bt);
		f.add(ta);

		myEvent();
		f.setVisible(true);
	}
	public void myEvent()
	{
		bt.addActionListener(new ActionListener()
		{
           public void actionPerformed(ActionEvent e)
		   {
			try
            {
				ta.setText("");
			    String ip=tf.getText();
			    URL url=new URL(ip);
			    URLConnection uc=url.openConnection();
			    InputStream In = uc.getInputStream();
			    byte[] buf=new byte[1024];
				int len=0;
		    	while((len=In.read(buf,0,buf.length))!=-1)
		    	{
			    	ta.append(new String(buf,0,len));
			    }

            }
            catch (Exception ee)
            {
               throw new RuntimeException("登陆服务器失败!");
            }
		 }
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
	public static void main(String[] args)
	{
		new TCP();
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 08:19:37

黑马程序员——java高新技术——网络编程的相关文章

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

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.网络通讯 概念:网络间数据的传输.交互. 三要素:IP地址.端口号.传输协议. ——>IP地址 1.网络中设备的标识 2.单纯的IP地址不易记忆,可用主机名替代. 3.如果本机上没有配置任何IP地址的情况下,本机默认的IP地址为127.0.0.1 本地回环地址:127.0.0.1  主机名:localhost 用处:检验本机网卡是否运行正常等. ——>端口号 概念:用于标识进程的数字称为

黑马程序员——JAVA基础-网络编程-TCP

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- TCP传输 两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流.该流中既有读取,也有写入. tcp的两个端点:一个是客户端,一个是服务端. 客户端:对应的对象,Socket 服务端:对应的对象,ServerSocket TCP客户端: ①:建立tcp的socket服务,最好明确具体的地址和端口.这个对象在创建时,就已经可以对指定ip和端口

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

第一讲 网络概述 1.网络通信三要素:电脑IP地址.软件本地端口号.网络间传输协议(国际通用的TIP/IP,还有很多其他的) 小知识:-ping 127.0.0.7可以测试网卡用 2.网络模型图列: 用户在运用层发出的数据,经过逐层打包后通过物理层传输到另一个模型中,然后逐层分解,找到端口,被另一个用户获得 IP地址:InetAddress• 网络中设备的标识• 不易记忆,可用主机名• 本地回环地址:127.0.0.1 主机名:localhost 使用java.net包中的InetAddress

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

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.  网络参考模型  1.OSI参考模型和 TCP/IP 参考模型 七层描述: (1). 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流. (2). 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这一层工作的设备是交换机,数据通过交换机来传输. (3). 网络层:主要将下层接收到的数据进行I

黑马程序员——Java基础——网络编程02

第一讲 TCP的应用 使用TCP客户端上传图片: 1 /*使用TCP客户端上传图片 2 * 注:单线程的服务端有个举行性:当A客户客户端连接上一行,被服务端获取,B客户必须等待 3 * 那么为了可以让多个客户端同时并发访问服务器,最后服务短短将每个客户端封装一个单独的线程中 4 * 5 * 定义线程的方法 6 * 只有明确了每一个客户端要在服务端执行的代表.就将该代码存入run()方法中 7 */ 8 import java.io.*; 9 import java.net.*; 10 //客户端

黑马程序员_JAVA UDP网络编程学习笔记

一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路.与TCP通信不同,UDP是面向无连接的.不可靠的基于数据包的传输协议.即应用进程(或程序)在使用UDP协议之前,不必先建立连接.自然,发送数据结束时也没有连接需要释放.因此,减少了开销和发送数据之前的延时.UDP也采用端口来区分进程. 在java中,java.

黑马程序员——Java高新技术代理

代理 普通代理 很多时候,我们使用别人代码往往会发现别人代码的功能并不是十分符合我们的需求,调用别人的方法的时候,总是先new一个对象,然后我们的前处理做完,然后调用别人代码的方法,再加入后处理,这样做往往十分麻烦.代理就为其他类提供了一种控制其对象的方法.代理类和委托类必须实现同一个接口,这样代理类才能在需要的时候代替委托类对象,执行委托类的方法. interface Solution{ public void doSomething(); } //委托类Demo实现了接口 class Dem

黑马程序员——java高新技术(新特性、反射、泛型)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java高新技术 第一部分——JDK1.5新特性 1.增强for循环 格式: for(元素类型 变量名 : Collection集合 & 数组 ) { }//增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器 高级for循环和传统for循环的区别: 高级for循环在使用时,必须要明确被遍历的目标.这个目标,可以是Collection集合或者数组,如果遍历Collec

黑马程序员——29,网络编程UDP

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一:网络传输----> 网络传输一般是先找到IP地址然后把数据发送到对方指定的应用程序上,网络应用程序都用数字进行标示,就是逻辑端口.通信规则就是协议,国际组织通信规则是TCP/IP.网络参考模型如图1所示. 图1 数据传输的时候都是从应用层开始往下推进,每过一层都会被数据封包,再经过传输线路传输到对方的主机上,再从物理层往上层层递进,每过一层都会被数据拆包,最后获得数据. 前期学习编程都是在