黑马程序员——网络编程

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

< 今日心情 >放掉懒惰,再加上一份坚持

一、网络通讯三要素

1.IP地址:InetAddress

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

2.端口号

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

3.传输协议

通信的规则
常见协议:TCP、UDP
TCP:面向连接,数据传输安全,效率相对较低
UDP:面向无连接,数据传输不安全,速度快

二、数据传输


1.Socket

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

2.UDP传输

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.io.*;
class Send
{
	/*
		1.建立UDP服务
			创建DatagramSocket对象,实现发送端套接字(发送端端点),可以指定套接字端口,也可以不指定使用随机空闲端口
		2.提供数据,并封装到数据到包中
			创建DatagramPacket对象,指定传送的数据,访问的主机ip(封装到InetAddress对象中)和端口,
		3.发送数据包
			通过DatagramSocket对象的send方法发送数据包	
		4.关闭服务
			
	*/
	public static void main(String[] args) throws Exception
	{
		DatagramSocket ds=new DatagramSocket(11010);
		byte[] bytes=new byte[1024];
		int pos=0;
		InetAddress id=InetAddress.getByName("221.193.220.173");
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		String line;
		while(true)
		{
			line=bf.readLine();
			pos=0;
			for(byte b : line.getBytes())
			{
				bytes[pos++]=b;
				if(pos==1024)
					break;
			}
			ds.send(new DatagramPacket(bytes,0,pos,id,11011));
			if("over".equals(line))
				break;
		}
		ds.close();
	}
}


class Receive
{
	/*
		1.建立UDP服务
			创建DatagramSocket对象,实现接收端套接字,必须指定套接字端口
		2.定义数据包
			创建DatagramPacket对象,定义数据包用来接收数据
		3.接收数据
			DatagramSocket对象的receive方法接收数据包
		4.处理数据
			DatagramPacket对象中
				getAddress方法可以获得数据包中的InetAddress对象,该对象是客户端封装的数据包中的
				getData获取保重的缓存数据
				getLength获取缓存数据的长度
		5.关闭服务
	
	*/
	public static void main(String[] args) throws Exception
	{
		//1.建立本机接受数据的端点
		DatagramSocket ds=new DatagramSocket(11011);
		//2.定义数据包,存储数据
		byte[] bytes=new byte[1024];
		DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
		String line;
		while(true)
		{
			//3.接收数据
			ds.receive(dp);
			//4.处理数据
			line=new String(dp.getData(),0,dp.getLength());
			System.out.println(dp.getAddress().getHostAddress()+" : "+line);
			if("over".equals(line))
				break;
		}
		//关闭服务
		ds.close();
	}
}

3.TCP传输

import java.net.*;
import java.io.*;
class TCPClient
{
	/*
		1.建立tcp客户端服务
			创建Socket对象,实现套接字,指定服务端主机ip和端口,建立连接。
		2.建立io流
			通过Socket获取InputStream对象和OutputStream对象进行数据的读写。
		注:OutputStream对象对流进行输出,目的为网络流,对应的服务端读取状态是一个阻塞状态。
		3.关闭tcp客户端服务
	*/
	public static void main(String[] args) throws Exception
	{
		Socket s=new Socket("221.193.238.214",11010);
		BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String line;
		while(true)
		{
			line=br.readLine();
			bw.write(line,0,line.length());
			bw.newLine();
			bw.flush();
			if("over".equals(line))
			{
				s.shutdownOutput();
				break;
			}
		}
		//s.close();
	}
}

class TCPServer
{
	/*
		1.建立tcp服务端服务
			创建ServerSocket对象,实现服务端套接字,指定套接字的端口。
		2.建立连接
			ServerSocket对象的accept方法可以获取客户端(客户端实现了套接字时)套接字,这是一个阻塞状态。
		3.建立io流
			通过客户端套接字获取InputStream对象和OutputStream对象进行数据读写。
		注;与客户端对应,客户端的数据读取状态也是一个阻塞状态。
		4.关闭服务
			通过客户端套接字可以关闭客户端服务。
			通过服务端套接字可以关闭服务端服务。
			
	*/
	public static void main(String[]args) throws Exception
	{
		ServerSocket ss=new ServerSocket(11010);
		Socket s=ss.accept();
		BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		String line;
		String ip=s.getAddress().getHostAddress();
		while((line=br.readLine())!=null)
			System.out.println(line);
		ss.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值