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

java学习——java 面向 Socket 操作,TCP 和 UDP 示例

2014-09-23 07:52 711 查看
TCP/IP 参考模型 

应用层-->传输层-->网络层--->物理+数据链路层  .

TCP 是一种提供可靠的、端到端的字节流通讯协议 。是一种面向连接的协议。TCP连接是字节流而非报文流。

UDP向应用程序提供了一种发送封装的原始ip数据报的方法、并且发送时无需建立连接。是一种不可靠的连接。

网关  、 路由器 。Socket编程 。

双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket。

java.net  包中的 Socket类 实现clinet端   ServerSocket类 实现TCP服务端

建立连接时所需要的寻址信息为远程计算机的IP地址和端口号 。

端口号 也分为 TCP端口  和 UDP端口  每一个都有 65536 个端口 。

accept(); 方法是阻塞式的  .

异步式的网络编程,接收数据 . 1.5只后.

1 TCP

[java] view
plaincopy

import java.net.*;  

import java.io.*;  

  

public class TCPServer{  

  

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

        ServerSocket ss=new ServerSocket(4567);  

        while(true){  

            Socket s=ss.accept();  

            DataInputStream dataIn=new DataInputStream(s.getInputStream());  

              

            System.out.println("client connection!");  

            System.out.println(dataIn.readUTF());  

            dataIn.close();  

            s.close();  

              

        }  

    }  

}  

[java] view
plaincopy

import java.net.*;  

import java.io.*;  

  

public class TCPClient{  

  

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

        Socket s=new Socket("127.0.0.1",4567);  

        OutputStream out = s.getOutputStream();  

        DataOutputStream dataOut=new DataOutputStream(out);  

        dataOut.writeUTF("hello server");  

        dataOut.flush();  

        dataOut.close();  

        s.close();  

    }  

}  

2 UDP

[java] view
plaincopy

import java.net.*;  

import java.io.*;  

  

public class UDPServer{  

      

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

          

        byte[] buf=new byte[1024];  

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

        DatagramSocket udp=new DatagramSocket(5678);  

        while(true){  

            udp.receive(dp);  

            //System.out.println(new String(buf,0,dp.getLength()));  

              

            //接受一个long类型的数据  

            ByteArrayInputStream byteIn=new ByteArrayInputStream(buf);  

            DataInputStream dataIn=new DataInputStream(byteIn);  

              

            System.out.println(dataIn.readLong());  

        }  

    }  

}  

[java] view
plaincopy

import java.net.*;  

import java.io.*;  

  

public class UDPClient{  

      

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

        //客户端准备要发的数据  

        byte[] buf=("hello, udp server!").getBytes();  

        //发送一个long类型的数据  

        long id=10000L;  

        ByteArrayOutputStream byteIn=new ByteArrayOutputStream();  

        DataOutputStream dataIn=new DataOutputStream(byteIn);   

        dataIn.writeLong(id);  

          

        byte[] buf2=byteIn.toByteArray();  

        //发送到目的地址  

        DatagramPacket dp=new DatagramPacket(buf2,buf2.length, new InetSocketAddress("127.0.0.1",5678));  

        DatagramSocket udp=new DatagramSocket(9999);  

        udp.send(dp);  

        udp.close();  

    }  

  

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