黑马程序员——网络编程知识点总结

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


进行网络通信需要的三要素:ip、端口、协议
IP      连接在internet中每台主机地址的标识,32bit。
//获取IP
InetAddress i = InetAddreass.getLocalHost();

InetAddress ia = InetAddreass.getByName("www.baidu.com");
sop("address:"+ia.getHostAddreass());
sop("name:"+ia.getHostName());


端口:   

1、网络设备接口(集线器、交换机、路由器)----物理

2、TCP/IP协议中的接口.----逻辑
0~65535
0~1024

..计算机运行程序的标识

协议:
UDP:
将数据、源、目的封装成数据包,不需要建立连接
每个数据包限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快
TCP:
建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次握手完成连接,是可靠协议
必须建立连接,是可靠协议

InetAddress类:
基本方法列举
getAddress()返回此 InetAddress 对象的原始 IP 地址。
getHostAddress()返回 IP 地址字符串(以文本表现形式)。
getHostName()获取此 IP 地址的主机名。
getAllByName(String host)在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
getByName(String host)在给定主机名的情况下确定主机的 IP 地址。
getLocalHost()返回本地主机。
isReachable(int timeout)测试是否可以达到该地址。


DatagramPacket类
需求:通过UDP传输协议将一段文字数据发送出去
思路:
1、建立udpSocket服务
2、提供数据并将数据封装到数据包中
3、通过Socket服务的发送功能将数据发送出去
4、关闭资源



面向Socket编程
Socket就是为网络服务提供的一种机制,对应于网络中的传输层,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。
无论是UDP的面向连接还是TCP的面向连接,我们面向的其实都是Socket。

Socket中的一些常用方法:
bind(SocketAddress bindpoint)将套接字绑定到本地地址。
connect(SocketAddress endpoint)&connect(SocketAddress endpoint, int timeout)将此套接字连接到服务器,且后者可以指定一个超时值。
getInetAddress()&getPort() 返回套接字连接的远程地址及端口。 
getLocalAddress()&getLocalPort()获取套接字绑定的本地地址即端口。
getInputStream()&getOutputStream()返回此套接字的输入输出流。
shutdownInput()&shutdownOutput()禁用此套接字的输入流与输出流,即使同时调用了两方法也不能导致Socket关闭,另外shutdownOutput()方法通常用于告知服务端客户端发送结束。



URL类:
类URL代表一个统一资源定位符,它是指向互联网“资源”的指针。使用该类的openConnection()方法即可获取对应的URLConnection对象,也可以通过openStream()方法直接获取其所指向资源的输入流。
它也提供了一系列的get方法来提取封装在URL对象中的信息
URL中的基本方法:
getFile()获取此 URL 的文件名。
getHost()获取此 URL 的主机名(如果适用)。 
getPath()获取此 URL 的路径部分。 
getPort()获取此 URL 的端口号。 
getProtocol()获取此 URL 的协议名称。 
getQuery()获取此 URL 的查询部分。 
URLConnection它代表应用程序和 URL之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。
创建一个到URL的连接需要几个步骤:
1、通过在 URL 上调用 openConnection 方法创建连接对象。 
2、处理设置参数和一般请求属性。 
3、使用 connect 方法建立到远程对象的实际连接。 
4、远程对象变为可用,远程对象的头字段和内容变为可访问。


UDP实现发送和接收数据操作
发送端代码实例:

import java.io.*;
import java.net.*;
class UdpSend{
   public static void main(String args[]) throws Excption{
   DatagramSocket ds = new DatagramSocket();
   byte[] buf = "abcde".getByte();
   DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddreass.getByName(" 127.0.0.1 "), 10000);
   ds.send(dp);
   ds.close();
   }
}


接收端代码实例:

import java.io.*;
import java.net.*;
class UdpReve{
   public static void main(String args[]) throws Excption{
   DatagramSocket ds = new DatagramSocket(10000);
   byte[] buf = new byte[1024];
   DatagramPacket dp = new DatagramPacket(buf, buf.length);
   ds.receive(dp);
   String ip = dp.getAddress().getHostAddress();
   String data = new String(dp.getDate(), 0, dp.getLength());
   int port = dp.getPort();
   System.out.println(ip+ "--" +data+ "--" +port);
   ds.close();
   }
}
	//使用while(true)使接收端持续开启

练习:将本地图片上传到服务器,代码实现:

客户端代码实现:

public class PicClient {
	
	public static void main(String args[]) throws Exception{
		Socket s = new Socket("117.84.140.104", 10001);
		FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\1.jpg");
		OutputStream out = s.getOutputStream();
		byte[] buf = new byte[1024];
		int ch = 0;
		while((ch = fis.read(buf)) != -1){
			out.write(buf, 0, ch);
		}
		s.shutdownOutput();
		InputStream in = s.getInputStream();
		ch = in.read(buf);
		System.out.println(new String(buf, 0, ch));
		fis.close();
		s.close();
	}
}


服务器端代码实现:

public class PicServer {

	public static void main(String args[]) throws Exception{
		ServerSocket ss = new ServerSocket(10001);
		Socket s = ss.accept();
		InputStream in = s.getInputStream();
		FileOutputStream fis = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\2.jpg");
		byte[] buf = new byte[1024];
		int len = 0;
		while((len = in.read(buf)) != -1){
			fis.write(buf, 0, len);
		}
		OutputStream out = s.getOutputStream();
		out.write("上传完毕".getBytes());
	}
}




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值