java 网络编程 博客园_Java 网络编程

InetAddress类

1.InetAddress用来代表IP地址。一个InetAdress的对象就代表着一个IP地址

2.如何创建InetAddress的对象:getByName(String host)

3.getHostName(): 获取IP地址对应的域名

getHostAddress():获取IP地址

基于Socket的TCP编程

99GoAbrw7Lj4xAAAgiwEAQBYDAMCRxQAAcM65ADJ53D6voE5iAAAAAElFTkSuQmCC

客户端Socket的工作过程包含以下基本的步骤

1.创建一个Socket的对象,通过构造器指明服务端的IP地址,以及其接收程序的端口号

2.getOutputStream():发送数据,方法返回OutputStream的对象

3.具体的输出过程

4.关闭相应的流和Socket对象

服务器程序的工作过程包含以下基本的步骤:

1.创建一个ServerSocket的对象,通过构造器指明自身的端口号

2.调用其accept()方法,返回一个Socket的对象

3.调用Socket对象的getInputStream()获取一个从客户端发送过来的输入流

4.对获取的输入流进行的操作

5.关闭相应的流以及Socket、ServerSocket的对象

//TCP编程例三:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。并关闭相应的连接。

//如下的程序,处理异常时,要使用try-catch-finally!!本例仅为了书写方便~

public class TestTCP3 {

@Test

public void client()throws Exception{

//1.创建Socket的对象

Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9898);

//2.从本地获取一个文件发送给服务端

OutputStream os = socket.getOutputStream();

FileInputStream fis = new FileInputStream(new File("1.jpg"));

byte[] b = new byte[1024];

int len;

while((len = fis.read(b)) != -1){

os.write(b,0,len);

}

socket.shutdownOutput();

//3.接收来自于服务端的信息

InputStream is = socket.getInputStream();

byte[] b1 = new byte[1024];

int len1;

while((len1 = is.read(b1)) != -1){

String str = new String(b1,0,len1);

System.out.print(str);

}

//4.关闭相应的流和Socket对象

is.close();

os.close();

fis.close();

socket.close();

}

@Test

public void server() throws Exception{

//1.创建一个ServerSocket的对象

ServerSocket ss = new ServerSocket(9898);

//2.调用其accept()方法,返回一个Socket的对象

Socket s = ss.accept();

//3.将从客户端发送来的信息保存到本地

InputStream is = s.getInputStream();

FileOutputStream fos = new FileOutputStream(new File("3.jpg"));

byte[] b = new byte[1024];

int len;

while((len = is.read(b)) != -1){

fos.write(b, 0, len);

}

System.out.println("收到来自于" + s.getInetAddress().getHostAddress() + "的文件");

//4.发送"接收成功"的信息反馈给客户端

OutputStream os = s.getOutputStream();

os.write("你发送的图片我已接收成功!".getBytes());

//5.关闭相应的流和Socket及ServerSocket的对象

os.close();

fos.close();

is.close();

s.close();

ss.close();

}

}

UDP网络通信

类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。

UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。

DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。

UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接

流  程

public class TestUDP {

// 发送端

@Test

public void send() {

DatagramSocket ds = null;

try {

ds = new DatagramSocket();

byte[] b = "你好,我是要发送的数据".getBytes();

//创建一个数据报:每一个数据报不能大于64k,都记录着数据信息,发送端的IP、端口号,以及要发送到

//的接收端的IP、端口号。

DatagramPacket pack = new DatagramPacket(b, 0, b.length,

InetAddress.getByName("127.0.0.1"), 9090);

ds.send(pack);

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(ds != null){

ds.close();

}

}

}

// 接收端

@Test

public void rceive() {

DatagramSocket ds = null;

try {

ds = new DatagramSocket(9090);

byte[] b = new byte[1024];

DatagramPacket pack = new DatagramPacket(b, 0, b.length);

ds.receive(pack);

String str = new String(pack.getData(), 0, pack.getLength());

System.out.println(str);

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(ds != null){

ds.close();

}

}

}

}

URL编程

URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。

URL的基本结构由5部分组成:

://:/        例如: http://192.168.1.100:8080/helloworld/index.jsp

构造器

public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象。例如:URL url = new URL ("http://www. atguigu.com/");

public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象。例如:URL downloadUrl = new URL(url, “download.html")

public URL(String protocol, String host, String file); 例如:new URL("http", "www.atguigu.com", “download. html");

public URL(String protocol, String host, int port, String file); 例如: URL gamelan = new URL("http", "www.atguigu.com", 80, “download.html");

一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:

public String getProtocol( ) 获取该URL的协议名

public String getHost( ) 获取该URL的主机名

public String getPort( ) 获取该URL的端口号

public String getPath( ) 获取该URL的文件路径

public String getFile( ) 获取该URL的文件名

public String getRef( ) 获取该URL在文件中的相对位置

public String getQuery( ) 获取该URL的查询名

URL的方法 openStream():能从网络上读取数据

如果既有数据的输入,又有数据的输出,则考虑使用URLConnection

URLConnection:表示到URL所引用的远程对象的连接。当与一个URL建立连接时,首先要在一个 URL 对象上通过方法 openConnection() 生成对应的 URLConnection 对象。如果连接过程失败,将产生IOException.

URL netchinaren = new URL ("http://www.atguigu.com/index.shtml");

URLConnectonn u = netchinaren.openConnection( );

通过URLConnection对象获取的输入流和输出流,即可以与现有的CGI程序进行交互。

public Object getContent( ) throws IOException

public int getContentLength( )

public String getContentType( )

public long getDate( )

public long getLastModified( )

public InputStream getInputStream( )throws IOException

public OutputSteram getOutputStream( )throws IOException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值