网络编程

原创 2011年01月16日 19:04:00

Java中的网络编程类
1.位于java的java.net包中
2.DatagramSocket类用于UDP的通信
3.ServerSocket类用于TCP通信的服务器端
4.Socket类用于TCP通信的服务器和客户端

编程实例:简单的UDP程序
package Socket;
import java.net.*;
public class UdpSend {

 /**
  * @param args
  */
 public static void main(String[] args)  {
  // TODO Auto-generated method stub
        try{DatagramSocket ds=new DatagramSocket();
        String str="hello world";
       // DatagramPacket dp=new DatagramPacket(3000);
        //ds.send(new DatagramPacket(str.getBytes(),str.getBytes().length
        //若有中文字符时
        ds.send(new DatagramPacket(str.getBytes(),str.length(),
          InetAddress.getByName("192.168.1.103"),3000));
        ds.close();
 }catch(Exception e){  
  e.printStackTrace();
  
 }
 }
}
package Socket;
import java.net.*;
public class UdpRev {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        try{ DatagramSocket ds=new DatagramSocket(3000);
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,1024);
        ds.receive(dp);
       System.out.println( new String(dp.getData(),0,dp.getLength())+
      "from"+  dp.getAddress().getHostAddress()+":"+dp.getPort());
       ds.close();
 }catch(Exception e){
  e.printStackTrace();
  
 }
 
 }

}
该程序简单实现了 在同一IP下通过UDP方式传送/获取数据


用UDP编写网络聊天程序:
package Socket;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.*;
import java.net.*;
public class Chat extends Frame {
 List lst=new List(6);
 TextField tfIP=new TextField(15);
 TextField tfData=new TextField(20);
 DatagramSocket ds=null;
 public Chat(){
  try{
   ds=new DatagramSocket(3000);
  }catch(Exception e){
   e.printStackTrace();
  }
  this.add(lst,"Center");
  Panel p=new Panel();
  this.add(p,"South");
  p.setLayout(new BorderLayout());
  p.add(tfIP,"West");
  p.add(tfData,"East");
  //建立一个新线程用于接收发送方的数据、
  new Thread(new Runnable(){
   public void run(){
    byte [] buf=new byte[1024];
    DatagramPacket dp=new DatagramPacket(buf,1024);
    while (true){
     try{
      //接收数据,并将接收到的数据添加
      //到lst中去
                                                ds.receive(dp);
      lst.add(new String

(buf,0,dp.getLength())+
        

"from"+dp.getAddress().getHostAddress()+":"+dp.getPort(),0);
      
     }catch(Exception e){
      if(!ds.isClosed()){
      e.printStackTrace();
      }
     }
    }
    
   }
  }).start();
  tfData.addActionListener(new ActionListener(){
   
   public void actionPerformed(ActionEvent e){
    byte []buf;
    buf=tfData.getText().getBytes();
    try{DatagramPacket dp=new DatagramPacket

(buf,buf.length,
      InetAddress.getByName

(tfIP.getText()),3000);
    
    ds.send(dp);
    }catch(Exception ex){
     ex.printStackTrace();
    }
    tfData.setText("");
   }
  });
  addWindowListener(new WindowAdapter(){
   public void WindowClosing(WindowEvent e){
       ds.close();
    dispose();
       System.exit(0);
  }
 });
 
 
 }
 public static void main(String args[]){
  System.out.println("Start chating....");
  Chat mainFrame=new Chat();
  mainFrame.setSize(300, 400);
  mainFrame.setTitle("chat");
  mainFrame.setVisible(true);
  mainFrame.setResizable(false);
  
 }
 

}

一、问题:只有UDP程序才能发送和接受广播地址的数据,为什么?
udp协议时面向无连接的,即通讯之间无需建立连接,它只是把应用程序传递给IP层的数据发送出去,不保证成功与否。而TCP协议则是面向连接的字节流服务,它只有在建立可靠的连接后才能进行数据传递,就没法达到广播的目的。

广播数据包:数据报套接口可以用来向许多系统支持的网络发送广播数据包。要实现这种功

能,网络本身必须支持广播功能,因为系统软件并不提供对广播功能的任何模拟。广播信息

将会给网络造成极重的负担,因为它们要求网络上的每台主机都为它们服务,所以发送广播

数据包的能力被限制于那些用显式标记了允许广播的套接口中。
二、广播使用的两种情况:
1. 一个应用程序希望在本地网络中找到一个资源,而应用程序对该资源的地址又没有任何先

验的知识。
2. 一些重要的功能,例如路由要求把它们的信息发送给所有可以找到的邻机
三、扩展:①IP地址、网络地址、广播地址三者的区别。二已知IP地址、子网掩码求网络地址和广播地址。③已知网络主机数量进行子网地址的规划和计算子网掩码(计算机网络知识)。

WINDOWS网络编程技术

  • 2017年12月12日 11:39
  • 12.56MB
  • 下载

iOS 网络编程

  • 2017年12月12日 12:01
  • 46.1MB
  • 下载

Python基础知识-网络编程

摘要:使用Python基本套接字功能和应用层协议模块开发网络应用1预备知识1.1 关于本指导手册Python是一种非常流行的面向对象的脚本语言,具有语法简洁的特点,并且拥有非常广泛的开发者基础。它是通...

windows网络编程技术 pdf附源码

  • 2017年11月16日 11:25
  • 15.01MB
  • 下载

Python网络编程攻略

  • 2017年11月06日 10:44
  • 16.3MB
  • 下载

【网络编程】半同步--半异步线程池源码分析之任务队列(基于C++11)

前言对于C++的学习,感觉如果只看书,学习效率很低。很多新知识新概念理解起来都很困难,而C++11更是引入了更多新的概念和知识。而在学习服务端这部分,什么“同步–异步”也把人搞得很晕 如果看不懂...

Java - 网络编程PPT

  • 2017年10月30日 15:15
  • 1.77MB
  • 下载

Linux_网络编程(带书签)

  • 2017年11月05日 19:35
  • 1.89MB
  • 下载

网络编程之POP3协议邮箱收信

POP3例子编程软件:VS2015 语言:C/C++ 这里主要讲解POP3邮箱收信 了解E-Mail的协议:http://blog.csdn.net/aaron133/article/details/...

MFC网络编程课件

  • 2017年10月25日 15:43
  • 4.68MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程
举报原因:
原因补充:

(最多只允许输入30个字)