网络编程

来源:互联网 发布:无线传感器网络电子书 编辑:程序博客网 时间:2024/06/03 23:40
---------------------- android培训、java培训、期待与您交流! ----------------------

网络有两种参考模型分别是OSI参考模型和TCP/IP参考模型其中OSI有物理层,数据链路层,网络层,传输层,会话层,表示层,应用层7层,TCP/IP参考模型

 有四层,想进行网络通讯必须具备以下要素,第一IP地址,它是网络设备的标识,第二是端口号,它用于标识进程的逻辑地址,其中0-1024为系统使用或者保留端

 口,不同的进程有不TCPUDP。有了以上三个要素以后我们就可以进行网络数据传输等活动了。

 两大主要传输协议的区别:

  UDP

      1,将数据及数据源和数据目的都封装成包,不需要简历连接,源将数据打包,目的接收数据包,

      2,每个数据包的大小限制在64K以内,超过以后自动进行切割,

      3,因为没有连接所以是不可靠协议,

      4,速度快因为省了资源连接时会有资源消耗

  TCP

      1,建立连接形成数据通道,

      2,在连接中进行大量数据传输,没有大小限制,

      3,通过三次握手完成连接,是可靠协议(三次握手:)

      4,因为必须建立连接因而效率降低,

  无论用那一种协议,都要先存在两个短点,Socket就是为网路提供服务的两种机制,通信的两端都有,网路通信其实就是Socket的通信,数据在两端通过IO传输。

  有了Socket就有了网路通讯,而根据协议的不同会有不同的服务 */

 

 

package net;

 

import java.io.BufferedReader;

import java.io.FilenameFilter;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

 

public class NetDemo {

 

}

 

 

class SendDemo {

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

      DatagramSocket ds = new DatagramSocket();// 建立Socket对象

     

      String msg = "i am learing java";

      byte[] b = msg.getBytes();

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

 

      DatagramPacket dp = new DatagramPacket(b, b.length, inet, 9999);

      ds.send(dp);

      ds.close();

   }

 

}

 

class ReceiveDemo {

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

      // 建立Socket监听一个端口

      DatagramSocket ds = new DatagramSocket(9999);

      // 存放数据,一包的形式

      byte[] re = new byte[1024];

 

      DatagramPacket dp = DatagramPacket(re, re.length);

      String ip = dp.getAddress().getHostName();

      int port = dp.getPort();

      ds.receive(dp);

      ds.close();

   }

}

 

 

public class ClientDemo {

   public static void main(String args[]) throws Exception { // 所有异常抛出

      Socket client = null; // 表示客 户端

      client = new Socket("localhost", 8888);

      BufferedReader buf = null; // 一次性接收完成

      buf = new BufferedReader(new InputStreamReader(client.getInputStream()));

      String str = buf.readLine();

      System.out.println("服务器端输出内容:" + str);

      buf.close();

      client.close();

   }

}

 

// 建立服务端Socket对象必须监听一个接口

public class ServerDemo {

   public static void main(String args[]) throws Exception { // 所有异常抛出

      ServerSocket server = null; // 定义ServerSocket

      Socket client = null; // 表示客 户端

      PrintStream out = null; // 打印流输出最方便

      server = new ServerSocket(8888); // 服务器在8888端口上监听

      System.out.println("服务器运行,等待客户端连接。");

      client = server.accept(); // 得到连接,程序进入到阻塞状态

      String str = "hello world"; // 表示要输出的信息

      out = new PrintStream(client.getOutputStream());

      FilenameFilter fl = null;

      out.println(str); // 向客户端输出信息

      client.close();

      server.close();

   }

}

---------------------- android培训、java培训、期待与您交流! ----------------------
原创粉丝点击