黑马程序员:Java网络编程

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


网络通讯要素:

Ip地址:

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

例:
package com.java;

import java.net.InetAddress;

public class IPDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//通过InetAddress 获取主机名 主机地址
		InetAddress i = InetAddress.getLocalHost();
		System.out.println(i.toString());
		System.out.println("name:"+i.getHostName());
		System.out.println("address:"+i.getHostAddress());
		InetAddress i1= InetAddress.getByName("www.baidu.com");
		System.out.println(i1.toString());
		System.out.println(i1.getHostName());
	}

}



端口号:

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

传输协议:

常见协议:TCP,UDP

TCP和UDP

UDP:

将数据及源封装成数据包中,不需要建立连接。
每个数据包的大小限制在64K内。
因无连接,是不可靠协议。
不需要建立连接,速度快

TCP:

建立连接,形成传输数据的通道。
在连接中进行大数据传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低

Socket

Socket就是为网络服务提供的一种机制。
通信两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。

UDP传输

DatagramSocket与DataGramPacket
建立发送端,接收端
建立数据包
调用Socket的发送接收方法
关闭Socket
发送端与接收端是两个独立的运行程序

UDP发送端:

思路:
1、建立udpsocket服务。
2、提供数据,并将数据封装到数据包中。
3、通过socket服务的发送功能,将数据发送出去。
4,关闭资源。
package com.java;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		DatagramSocket dSocket = new DatagramSocket();				//建立udpsocket服务
		byte[] data = "UDP 发送".getBytes();							//提供数据,并封装成数据包
		DatagramPacket dp= 
				new DatagramPacket(data,data.length,InetAddress.getByName("10.218.180.16"),9999);
		dSocket.send(dp);											//通过socket服务的发送功能,将数据发出。
		dSocket.close();

	}

}


UDP接收端:

定义UDP接收端:
思路:
1、定义udpsocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序定义一个数字标识。
方便与明确那些数据过来该应用程序可以处理。
2、定义数据包,因为要存储接收到的字节数据,因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3、通过Socket服务的receive方法将接收到的数据存入已定义好的数据包中。
4、通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
5、关闭资源。
package com.java;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpRec {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		DatagramSocket recSocket = new DatagramSocket(9999);
		byte[] buf= new byte[1024];
		DatagramPacket dp= new DatagramPacket(buf,buf.length);
		recSocket.receive(dp);
		
		String  ip= dp.getAddress().getHostAddress();
		String dataString  =  new String(dp.getData(),0,dp.getLength());
		int port = dp.getPort();
		System.out.println(ip+":"+dataString+":"+port);
		recSocket.close();
		

	}

}



TCP传输:

1、建立客户端和服务器
2、建立连接后,通过socket中的IO流进行数据传输
3、关闭socket
客户端与服务器是两个独立的应用程序

TCP发送端:

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

步骤:
1、创建Socket服务,并指定要连接的主机和端口。
2、为了发送数据,应该获取socket流中的输出流。
3、关闭socket。

package com.java;

import java.io.OutputStream;
import java.net.Socket;


public class TcpSend {
	/**
	 *通过查阅socket对象,发现在该对象创建时,就可以去连接指定的主机
	 *因为tcp是面向连接的,所以在建立socket对象时,就要有服务端的存在
	 *并连接成功,形成通路后,在该通路进行数据的传输。
	 *
	 *步骤:
	 *1,创建socket服务,并指定连接的主机和端口。
	 *
	 */
	public static void main(String[] args) throws Exception {
		
		Socket s = new Socket("10.218.180.16",10001);			//指定目标主机和端口
		OutputStream outputStream  = s.getOutputStream();
		outputStream.write("tcphahhahahh".getBytes());
		s.close();
	}

}

TCP接收端:

1、建立服务端socket服务。ServerSocket();
并监听一个端口。
2、获取连接过来的客户端对象。
通过ServerSocket的accept方法。没有连接就会等,所以这个方法是阻塞式的。
3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端的读取来来获取该客户端发过来的数据。并打印到控制台上。
4、关闭服务端。
 
package com.java;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpRec {

	/**
	 * @param args
	 */
	
	/*
	 * 1、建立服务器的socket服务,serverSocket();
	 * 并监听一个端口
	 * 2、获取连接过来的客户端对象
	 * 通过serverSocket的accept方法,没有连接就等,所以这个方法是阻塞的。
	 * 3、客户端如果发过来数据,那么服务器要使用对应的客户端对象,并获取到该客户端的对象的读取流来读取发过来的数据
	 * 并打印到控制台
	 * 4、关闭服务器。(可选操作)
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//建立服务器的socket服务,serverSocket();
		ServerSocket ssServerSocket = new ServerSocket(10001);
		Socket socket = ssServerSocket.accept();
		String ip = socket.getInetAddress().getHostAddress();
		System.out.println(ip);
		InputStream inputStream = socket.getInputStream();
		byte[] buf = new byte[1024];
		int len = inputStream.read(buf);
		System.out.println(new String(buf,0,len));
		ssServerSocket.close();

	}

}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值