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

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

1.网络模型:

OSI参考模型:7层

TCP/IP模型:4层

2.网络通讯要素

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

InetAddress ia=InetAddress.getByName(“192.168.1.1”);获取主机的地址

ia.getHostAddress(); ia.getHostName();

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

传输协议:TCP/UDP

3.TCP和UDP区别

UDP:不需要建立连接,每个数据包的大小限制在64k以内,不可靠协议,速度块。(聊天、网络视频)

TCP:需要建立连接,进行大数据量的传输,通过三次握手完成连接,是可靠协议,速度稍微慢。(下载)

4.Socket

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

5.UDP传输

发送端

1.建立udpSocket服务

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

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

4.关闭资源。

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 ds=new DatagramSocket();//创建UDPSocket服务通过DatagramSocket对象
		
		byte[] data="我来了".getBytes();//字符串变成字节数组
		
		//将数据封装成数据包
		DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("192.168.1.1"),4000);
		
		ds.send(dp);//通过socket服务,将已有的数据包发送出去
		
		ds.close();//关闭资源
	}

}

接收端

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

2.定义一个数据包,存储接收到的字节数据。

3.通过socket服务的接收功能,将收到的数据存入定义好的数据包中

4.通过数据包对象功能,将数据取出

5.关闭资源。

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

public class UdpReceive {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		DatagramSocket ds=new DatagramSocket(4000);//创建udpSocket通过DatagramSocket对象
		
		//定义数据包用于存储接收的数据
		byte[] data=new byte[1024];
		DatagramPacket dp=new DatagramPacket(data,data.length);
		
		//通过received方法将数据存入数据包中
		ds.receive(dp);
		
		//通过数据包中的方法获取数据
		String ip=dp.getAddress().getHostAddress();
		String dat=new String(dp.getData(),0,dp.getLength());
		int port=dp.getPort();
		
		//关闭资源
		ds.close();
	}

}

6.TCP传输

客户端

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

2.获取Socket流中的输出流发送数据,通过write方法写入要发送的内容

3.获取Socket流中的输入流接收数据,通过read方法读取接收的内容

4.关闭资源

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


public class TcpClient {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		Socket s=new Socket("192.168.1.1",4001);//创建客户端的Socket服务,指定目的主机和端口
		
		OutputStream out=s.getOutputStream();//获取Socket流中的输出流发送数据
		out.write("wo lai le".getBytes());//写入要发送的数据
		
		InputStream in=s.getInputStream();//获取Socket流中接收的数据流
		//读取服务端发送的数据
		byte[] buf=new byte[1024];
		int len=0;
		while((len=in.read(buf))!=-1)
		{
			System.out.println(new String(buf,0,len));
		}
		
		s.close();//关闭资源
	}

}

服务端

1.建立服务端的Socket服务:ServerSocket(),并监听一个端口

2.获取连接过来的客户端信息:accept方法,阻塞式

3.客户端如果发过来数据,那么服务要使用对应的客户端对象,并获取到该客户端对象的读取流来读取数据。

4.关闭服务端(可选操作)

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

public class TcpServerSocket {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		//建立服务端的Socket服务,并监听一个端口
		ServerSocket ss=new ServerSocket(4001);
		
		Socket s=ss.accept();//通过accept方法获取连接过来的客户端对象
		String ip=s.getInetAddress().getHostAddress();//获取IP地址
		
		//获取客户端发送过来的数据,使用客户端对象的读取流来读取数据
		InputStream in=s.getInputStream();
		
		byte[] buf=new byte[1024];
		int len=0;
		while((len=in.read(buf))!=-1)
		{
			String str=new String(buf,0,len);
			System.out.println(str);
		}
		s.close();//关闭客户端
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值