黑马程序员——网络通信

来源:互联网 发布:系统优化的方法 编辑:程序博客网 时间:2024/04/29 09:39
<a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>

1、数据封包

1)      应用层      \\javaWeb开发

封装数据加标识(FTP|HTTP)

2)      传输层      \\网络编程

TCP|UDP

3)      网际层       \\网络编程

IP(数据要往哪里输出的网络设备的IP地址)

4)      主机至网络层

2、传输三要素

1)      IP地址

IPV4:一段一字节,共四段

     225.225.225.225

本机回环地址:127.0.0.1

测试网卡:ping  127.0.0.1

例:

InetAddress ia=InetAddress.getLocalHost();

            \\本地主机IP地址

InetAddress ia=InetAddress.getByName("127.0.0.1");

ia.getHostAddress();     \\IP地址字符串

ia.getHostName();       \\主机名,要解析,如果没联网,返回IP地址

2)      端口

逻辑端口:数字是0至65535

3)      通信规则

国际组织定通用协议:TCP/IP

3、传输层协议

(1)     UDP

1)     数据封包不超过64k,含对方IP及端口

2)     面向无连接

3)     不可靠协议

4)     传输速度快

发送:

1)     建立UDP Socket服务

DatagramSocket ds=new DataSocket();

2)     提供数据封包

byte[] data=”数据”.getBytes();

DatagramPacket dp=new DatagramPacket

(data,data.length,InetAddress.getByteName(),端口);

3)     通过Socket服务功能将包发出

ds.send(dp);

4)     关闭资源

ds.close();

 接受:

1)     定义UDP Socket服务,建端点

DatagramSocket ds=new DatagramSocket(端点);

2)     定义数据包,接收发来的数据,包中含能提取字节数据中的不同数据信息

byte[] data=new byte[1024];

DatagramPacket dp=new DatagramPacket();

3)     通过Socket的receive将数据封包

ds.receive(dp);

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

String ip=dp.getAddress.getHostAddress();

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

int port=dp.getPort();

5)     关闭源

ds.close();

例:

class UdpSend{  public static voidmain(String[] args) throws Exception {           DatagramSocket ds=newDatagramSocket();           BufferedReader br=newBufferedReader(new InputStreamReader(System.in));           String line=null;           while((line=br.readLine())!=null){                    if("886".equals(line))                             break;                    byte[]data=line.getBytes();                    DatagramPacket dp=newDatagramPacket                                     (data,data.length,InetAddress.getByName("127.0.0.1"),10000);                    ds.send(dp);           }           ds.close();  }}class UdpReceive{  public static voidmain(String[] args) throws Exception {           DatagramSocket ds=newDatagramSocket(10000);           byte[] buf=new byte[1024*64];           DatagramPacket dp=newDatagramPacket(buf, buf.length);           ds.receive(dp);           Stringip=dp.getAddress().getHostAddress();           String data=newString(dp.getData(),0,dp.getLength());           int port=dp.getPort();        System.out.println(data+"————主机地址:"+ip+"    端口:"+port);  }<span id="transmark"></span>}


(2)     TCP

1)     面向连接

2)     可靠协议

3)     传输速度低   (A在?——我在。——我知道了。)

客服端:

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

Socket s=new Socket(“127.0.0.1”,10000);

2)     获取Socket中的输出流

OutputStream out=s.getOutputStream();

3)     数据写流中

out.write(“数据”.getBytes());

4)     关闭资源

s.close();

服务端:

1)     建立服务端的ServerSocket服务,并监听一端口

ServerSocket ss=new ServerSocket(10000);

2)     获取过来的客服端对象

Socket s=ss.accept();

3)     获取客服端读取流对象,并读取其中数据

InputStream in=s.getInputStream();

byte[] buf=new byte[1024];

int len=in.read(buf);

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

4)     关闭服务端

s.close();

ss.close();

例:tcp的传输的客户端和服务端的互访

class TcpClient{  public static voidmain(String[] args) throws Exception {           Socket s=newSocket("127.0.0.1",10001);           //发出           OutputStream out=s.getOutputStream();           out.write("hello,Server;l amClient".getBytes());           //接受           BufferedOutputStream  out=new BufferedOutputStream                              (s.getOutputStream());           byte[] buf=new byte[1024];           int len=0;           while((len=in.read(buf))!=-1){                    String str=newString(buf,0,len);                    System.out.print(str);           }           s.close();  }}  class TcpServer{  public static voidmain(String[] args) throws Exception {           ServerSocket ss=newServerSocket(10001);           Socket s=ss.accept();           //接受           BufferedInputStream in=newBufferedInputStream(s.getInputStream());           byte[] buf=new byte[1024];           int len=0;           while((len=in.read(buf))!=-1){                    String str=newString(buf,0,len);                    System.out.print(str);           }           //发出           OutputStream out=s.getOutputStream();           out.write("hello,Client;l amServer".getBytes());           ss.close();           s.close();  }}



0 0
原创粉丝点击