黑马程序员——网络编程

黑马程序员——络编程

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------

一、网络通信三要素:IP地址,端口号,传输协议

IP地址 

它是网络中的设备标识 

不易记忆,可用主机名表示,两者存在映射关系 

本机回环地址:127.0.0.1,主机名为:localhost

端口号

用于表示进程的逻辑地址,不同进程的标识

有效端口:0~65535,其中0~1024系统使用或保留端口

传输协议:通讯的规则

常见协议:TCPUDP 

UDP: 面向无连接,即将数据及源和目的封装成数据包中,不建立链接的发送 

每个数据包的大小限制在64K之内 

因无连接,是不可靠的协议 

不建立连接,速度快。

TCP:  面向连接,在建立连接后,形成传输数据的通道 

在连接中进行大数据量的传输 

通过三次握手完成连接,是可靠的协议 

必须建立连接,效率稍慢 

二、传输协议

1.Socket

它被称之为插座,相当于港口一样,是网络服务提供的一种机制。 

通信两端都要有Socket,才能建立服务。 

网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

2.UDP传输

DatagramSocketDatagramPacket

建立发送端,接受端

建立数据包

调用Socket的发送接受方法

关闭Socket

发送端与接受端是两个独立程序。

发送端实例:

  1、创建UDP服务

  2.将数据封装成包

  3、将包通过socket发送出去

  4、关闭资源

public class udp {

 

public static void main(String[] args) throws Exception {

// TODO 自动生成的方法存根

//创建udp服务

DatagramSocket ds=new DatagramSocket();

//将数据封装成包

byte[] be="sdfgfdh".getBytes();

//发送

DatagramPacket dp=

new DatagramPacket(be,be.length,InetAddress.getByName(

"192.168.1.5"),2000);

ds.send(dp);

ds.close();

接受端实例:

 * 1.定义udp服务

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

 * 因为数据包对象中有更多功能 可以提取字节数据中的不同数据信息

 * 3.通过socket中的receive方法将只收到的数据存入已定义好的数据包中

 * 4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上

 * 5.关闭资源*/

class udp1 {

 

public static void main(String[] args) throws Exception {

//建立udp服务

DatagramSocket ds=new DatagramSocket(2000);

//定义一个数据包

byte[] be=new byte[1024];

DatagramPacket dp=

new DatagramPacket(be,be.length);

//存入数据包

ds.receive(dp);

//通过数据包方法获取其中的数据

String s=dp.getAddress().getHostAddress();

String st=new String(dp.getData(),0,dp.getLength());

int port=dp.getPort();

System.out.println(s+"..."+st+"...."+port);

ds.close();

}

}

}

 

}

3.TCP传输

SocketServerSocket

建立客户端和服务端

建立连接后,通过Socket中的IO流进行数据的传输

关闭Socket

同样,客户端与服务端是两个独立的应用程序。

 

 

客户端

 *通过查阅socket对象,发现在该对象建立时,就可以去连接指定的主机

 *因为tcp是面向连接的,所以在建立socket服务时

 *就要有服务端存在,并连接成功,形成通路后,在通道进行数据传输

 *

 * 步骤

 * 1、创建socket服务,并指定要连接的主机和端口

 * 2*/

public class tcp {

 

public static void main(String[] args) throws Exception, IOException {

// TODO 自动生成的方法存根

//创建socket服务,并指定要连接的主机和端口

Socket s=new Socket("192.168.1.5",10000);

//为了发送数据,应该获取socket流中的输出流

OutputStream os=s.getOutputStream();

os.write("wolaile ".getBytes());

s.close();

}

 

}

 服务端

 *1、建立服务端的Socket服务,

 *并监听一个端口

 *2、获取连接过来的客户端对象

 *通过ServerSocketaccept方法,没有连接就会等,所以这个方法是阻塞

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

 *来读取发过来的数据,并打印在控制台

 *4、关闭服务(可选)

 * */

public static void main(String[] args) throws IOException {

// TODO 自动生成的方法存根

//建立服务端socket服务,并监听一个端口

ServerSocket ss=new ServerSocket(10000);

//通过accept方法获取连接过来的客户端对象

Socket s=ss.accept();

String ip=s.getInetAddress().getHostAddress();

System.out.println(ip);

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

 //来读取发过来的数据

InputStream is=s.getInputStream();

byte[] buf=new byte[1024];

int len=is.read(buf);

String str=new String(buf,0,len);

System.out.println(str);

}

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值