现在的位置: 首页 > 综合 > 正文

13—网络编程

2013年10月19日 ⁄ 综合 ⁄ 共 2093字 ⁄ 字号 评论关闭

 

网络编程:
 c/s程序应用:客户端/服务器:QQ:一个客户端,客户端打开之后连接到服务器上;
  服务器端改变后客户端有可能也得改变,需要两端维护
 b/s程序:浏览器/服务器;

程序分为两种:
 基于TCP协议:Socket,可靠的服务;(打电话:A打给B,B收到回应A)
 基于UPD协议:不可靠;(短信:A发给B,B不一定收到)

如果要编写一个TCP程序需要java的两个包支持;
 java.net.*:主要提供网络支持
  ServerSocket类:服务器端程序;
  Socket类:客户端程序;
 java.io.*:传输信息;

  import java.io.*;
  import java.net.*;
  public class TCPServer{
   public static void  main(String[] args) throws Exception{
    //使用ServerSocket
    ServerSocket server=null;
    //每一个用户在程序中就是一个Socket
    Socket client=null;
    server=new ServerSocket(8888);
    //等待客户端连接
    client=server.accept();
    //向客户端打印信息:helloworld
    PrintWriter out=null;
    //准备向客户端打印信息
    out=new PrintWriter(client.getOutputStream());
    out.println("hello world");
    out.close();
    client.close();
    server.close();
    }
   }
  运行后悔等待客户端到服务的连接
  运行 telnet 命令
  o localhost 8888

客户端就两个功能:
 建立Socket
 接受输入命令(输入流)---》网络上传输的程序靠的是字节流;

  import java.io.*;
  import java.net.*;
  public class TCPClient{
   public static void  main(String[] args) throws Exception{
    //表示一个客户端的Socket
    Socket client=null;
    //表示一个客户端的输入信息
    BufferedReader buf=null;
    client=new Socket("localhost",8888);
    buf=new BufferedReader(client.getInputStream())
    System.out.println(buf.readLine());
    buf.close();
    client.close()
    }
   }

UDP:
 服务器:
  import java.io.*;
  import java.net.*;
  public class UDPServer{
   public static void  main(String[] args) throws Exception{
    DatagramSocket ds=null;
    DatagramPacket dp=null;
    //要保证UDP有一个运行的端口
    ds=new DatagramSocket(5000);
    String s="hello world";
    dp=new DatagramPacket(s.getBytes(),0,s.length(),InetAddress.getByName("localhost"),8888);
    ds.send(dp);
    ds.close();
    }
   }
 客户端;
  import java.io.*;
  import java.net.*;
  public class TCPClient{
   public static void  main(String[] args) throws Exception{
    DatagramSocket ds=null;
    DatagramPacket dp=null;
    //手机发短信和接受信息是有大小限制的
    byte b[]=new byte[1024];
    //在8888端口上一直等待信息的到来
    ds=new DatagramSocket(8888);
    dp=new DatagramPacket(b,b.length);
    ds.receive(dp);
    //从数据包中取出数据
    String str=new String(dp.getBytes(),0,dp.getLength());
    dp.setData(s.getBytes());
    System.out.prinln("接受到的数据为:"+str);
    ds.close();
    }
   }

抱歉!评论已关闭.