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

来源:互联网 发布:mysql数据库安装教程 编辑:程序博客网 时间:2024/06/06 19:41

TCP/IP 参考模型 

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

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

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


网关  、 路由器 。Socket编程 。

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

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

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

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

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

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

1 TCP

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();}}}
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

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());}}}
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();}}










原创粉丝点击