您的位置:首页 > 理论基础 > 计算机网络

网络编程

2015-12-01 17:51 525 查看
网络编程

  用语言(Java)实现多台计算机的通信

  网络编程三大要素

 IP地址:每一台计算机的唯一标识

  IP采用"点分十进制"的形式标识(如:192.168.3.100),方便记忆

  IP分类:A类、B类、C类、D类、E类

    IP组成:网络号码+主机地址

  端口:指的是逻辑端口 

  每一个网络程序都会至少有一个逻辑端口;用于标识进程的逻辑地址,不同进程的标识不同

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

 协议

  UDP协议

   把数据打包、数据有限制、面向无连接、不可靠、速度快

   举例:新闻推送、QQ聊天室(群聊)

  TCP协议

   建立连接通道、数据无限制、面向连接(三次握手)、可靠、速度慢

   举例:蓝牙、QQ单聊、打电话

 InetAddress类

  public static InetAddress getByName(String host):根据主机名获取IP地址

  public String getHostAddress():返回IP地址字符串(文本形式)

  public String getHostName():返回IP地址的主机名

 DatagramSocket类

    构造方法:

     public DatagramSocket()

     public DatagramSocket(int port)

    方法:

     public void receive(DatagramPacket p):接收数据并把数据存入到DatagramPacket数据包中

   public void send(DatagramPacket p):发送DatagramPacket数据包

     public void close():释放资源

  public static InetAddress getByName(String host):根据主机名获取IP地址

  public String getHostAddress():返回IP地址字符串(文本形式)

  public String getHostName():返回IP地址的主机名

 DatagramPacket类

    构造方法:

     public DatagramPacket(byte[] buf,int length)

     public DatagramPacket(byte[] buf,int length,InetAddress addr,int port)

    方法:

     public InetAddress getAddress():返回发送端或者接收端的IP地址

   public byte[] getData():返回将要接收或者要发送的数据

     public int getLength():返回将要接收或者要发送数据的长度

   public int getPort():返回发送端或者接收端的端口号

 

  UDP网络程序:

  应用程序:网络编程、IO、多线程

*

 * UDP协议接收端:

 * 1、创建接收端Socket对象

 * 2、创建数据包对象

 * 3、接收

 * 4、解析接收到的数据并显示在控制台

 * 5、释放资源

 */

 public class ReceiveThread implements Runnable {

 @Override

 public void run() {

  try {

   DatagramSocket ds = new DatagramSocket(10086);

  while(true){

  byte[] bys = new byte[1024];

  DatagramPacket dp = new DatagramPacket(bys, bys.length);

   ds.receive(dp);

  String str = new String(dp.getData(), 0, dp.getLength()) + "from"

    + dp.getAddress().getHostAddress() + ":" + dp.getPort();

  System.out.println(str);

  }

  }catch (IOException e) {

   e.printStackTrace();

  }

 }

}

/*

 * UDP协议发送端:

 * 1、创建发送端Socket对象

 * 2、创建数据并封装数据

 * 3、发送

 * 4、释放资源

 */

public class SendThread implements Runnable {

 @Override

 public void run() {

  try {

   DatagramSocket ds = new DatagramSocket(2222);

   // 键盘录入

   BufferedReader br = new BufferedReader(new InputStreamReader(

     System.in));

   String line = null;

   while ((line = br.readLine()) != null) {

    if ("over".equals(line)) {

     break;

    }

    byte[] bys = line.getBytes();

    // 封装数据

    DatagramPacket dp = new DatagramPacket(bys, bys.length,

      InetAddress.getByName("Nina"), 10086);

    ds.send(dp);

   }

    // 释放资源

    ds.close();

  } catch (IOException e) {

   e.printStackTrace();

  }

 }

}

/*

 * 应用程序:网络编程,IO,多线程

 */

public class ChatRoom {

 public static void main(String[] args) {

  ReceiveThread rt = new ReceiveThread();

  SendThread st = new SendThread();

  Thread t1 = new Thread(rt);

  Thread t2 = new Thread(st);

  t1.start();

  t2.start();

 }

}

TCP网络程序:

 /*

 * TCP协议服务器端步骤:

 * 创建服务器端Socket对象

 * 监听连接

 * 获取输入流,读取数据并显示

 * 释放资源

 */

public class ServerDemo {

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

  ServerSocket ss = new ServerSocket(22222);

  Socket s = ss.accept();

  //读取数据

  BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

  //写入到文本文件中

  PrintWriter pw = new PrintWriter(new FileWriter("Out.java"),true);

  String line =null;

  while((line=br.readLine())!=null){

   pw.println(line);

  }

  //写入反馈数据

  PrintWriter out = new PrintWriter(s.getOutputStream(),true);

  out.println("文件上传成功");

  //释放资源

  pw.close();

  s.close();

 }

}

/*

 * 需求:客户端向服务器端上传文本文件

 * TCP协议客户端步骤:

 *创建客户端Socket对象并建立连接

 *获取输出流,写入数据

 * 释放资源

 */

public class ClientDemo {

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

  Socket s = new Socket("Nina",22222);

  

  //写入

  PrintWriter pw = new PrintWriter(s.getOutputStream(),true);

  //读取文本文件数据

  BufferedReader br = new BufferedReader(new FileReader("Test.java"));

  String line =null;

  while((line=br.readLine())!=null){

   pw.println(line);

  }

  s.shutdownOutput();

  //读取服务器反馈数据

  BufferedReader brServer = new BufferedReader(new InputStreamReader(s.getInputStream()));

  String server =brServer.readLine();

  System.out.println("server:"+server);

  //释放资源

  br.close();

  s.close();

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: