网络编程基础

来源:互联网 发布:长期避孕药 知乎 编辑:程序博客网 时间:2024/06/07 19:27

Socket通信
* 网络编程三要素:
ip:
一个计算的标示(找到这个计算机)
端口:
应用程序都会对应一个端口,用来进行通信,有效端口:0~65535,其中0~1024系统使用或保留端口。
协议:
总共有2种协议(TCP,UDP)
UDP
把数据打成一个数据包 , 不需要建立连接
数据包的大小有限制不能超过64k
因为无连接,所以属于不可靠协议(可能丢失数据)
因为无连接 ,所以效率高
TCP
需要建立连接,形成连接通道
数据可以使用连接通道直接进行传输,无大小限制
因为有链接,所以属于可靠协议
因为有链接,所以效率低

  1. InetAddress类的概述

            为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用,此类表示互联网协议 (IP) 地址。

    例子:

public class InetAddressTest {    /**     * @param args     * @throws Exception      */    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        //通过主机ip获取对象        InetAddress address = InetAddress.getByName("192.168.20.12");        System.out.println(address.getHostAddress());        System.out.println(address.getHostName());    }}

UDP通信步骤:
发送端步骤:

                  UDP发送数据的步骤:                  A:创建UDP发送数据端Socket对象                  B:创建数据包,并给出数据,把数据打包                  C:通过Socket对象发送数据包                  D:释放资源

接收端步骤:

                 UDP协议接收数据步骤:                  A:创建UDP接收数据端Socket对象                  B:创建一个接收数据的数据包                  C:接收数据,数据在数据包中                  D:解析数据包,并把数据显示在控制台                  E:释放资源

简单的聊天室代码实现:
客户端:

public class Client implements Runnable{    DatagramSocket ds;    public Client(DatagramSocket ds){        this.ds=ds;    }    Scanner sc = new Scanner(System.in);    String s;    @Override    public void run() {        // TODO Auto-generated method stub        while((s=sc.next())!=null){            byte[] buf = s.getBytes();            int length = buf.length;            InetAddress address = null;            try {                address = InetAddress.getByName("192.168.20.12");            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            int port = 2333;            DatagramPacket dp = new DatagramPacket(buf, length, address, port);            try {                ds.send(dp);            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        ds.close();    }}

服务端:

public class Server implements Runnable{    DatagramSocket ds;    public Server(DatagramSocket ds){        this.ds=ds;    }    @Override    public void run() {        // TODO Auto-generated method stub        while(true){            byte [] buf = new byte [1024];            int length = buf.length;            DatagramPacket dp = new DatagramPacket(buf, length);            try {                ds.receive(dp);            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            byte[] data = dp.getData();            int i = data.length;            System.out.println(dp.getAddress().getHostAddress()+":"+new String(data, 0, i));        }    }}

TCp通信步骤:
发送端:

             * TCP协议发送数据步骤:             * A:创建TCP协议发送端Socket对象             *      指定服务器IP及端口             * B:获取输出流,并写数据             * C:释放资源

接收端:

                 * TCP协议接收数据步骤:                 * A:创建TCP协议接收端Socket对象                 * B:监听客户端连接                 * C:获取输入流,并读取数据,显示在控制台                 * D:释放资源

例子:
客户端:

public class TcpClient {    /**     * @param args     * @throws Exception      */    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        Socket sk = new Socket("192.168.20.12", 2345);        OutputStream os = sk.getOutputStream();        byte[] buf = "hello".getBytes();        os.write(buf);        os.close();        sk.close();    }}

服务端:

public class TcpServer {    /**     * @param args     * @throws Exception      */    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        ServerSocket ss = new ServerSocket(2345);        Socket sk = ss.accept();        InputStream is = sk.getInputStream();        byte [] buf = new byte [1024];        is.read(buf);        System.out.println(new String(buf,0,buf.length));        is.close();        sk.close();    }}
原创粉丝点击