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

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

}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值