黑马程序员——Java网络编程基础

---------------------- android培训java培训、期待与您交流! ----------------------

网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。为了能够方便的识别网路上的每台设备,在网路上的设备都具有独一无二的数字标示,这个就称为IP地址,而引入IP地址就是为了网络编程能够在两台设备之间的准确通信,由IP地址可以唯一的确定网路上一台主机。现在命名IP地址是Ipv4协议,协议规定每个IP地址由4个0-255的数字组成,例如:192.168.0.34。 其中127.0.0.1是一个本地回送地址。但是IP地址不容易记忆,所以为了方便记忆,便创造了另一个概念—域名。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。一个计算机可以同时运行多个网络程序就要用的端口概念,

在网路编程中,通过两个重要的协议TCP(传输控制协议)协议和UDP(用户数据报协议)协议来实现通讯。

TCP协议是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议,要通过3次握手来完成连接,建立数据通路可以为传输大量数据服务,但是连接过程导致效率较低。

UDP协议是User Datagram Protocol的简称,是一种无连接的的协议,它将数据打包成最大64k的数据包,在不建立连接的情况下直接发送,传输速度快。

Java网络编程的基础便是基于Socket套接字的通讯,主要基于TCP/IP协议的网络编程,双向链路上的两端都是有socket套接字来接收和发送数据,而socket间是通过IO传输。

UDP发送端编程通常的步骤:建立DatagramSocket连接对象,定义一个数据包DatagramPocket,发送数据,关闭资源。

DatagramSocket ds = new DatagramSocket();

byte[] buf="shi yong UDP".getBytes();

DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),8080);

ds.send(dp);

ds.close();

UDP接收端步骤:建立DatagramSocket连接对象,定义一个数据包DatagramPocket接受发来的数据,关闭资源。

DatagramSocket ds = new DatagramSocket();

byte[] buf=new byte[1024];

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

ds.receive(dp);

String ip=dp.getAddress().getHostAddress();

String data=new String(dp.getData(),0,dp.getLength());

int port=dp.getPort();

System.out.println(ip+":"+data+":"+port);

ds.close();

TCP通讯则需要用到客户端对象Socket和服务端对象ServerSocket,由于TCP是需要面向连接的,在该对象建立时,就可以去连接指定主机。

TCP客户端编写:创建Socket服务,并指定要连接的主机和端口。

Socket s=new Socket("192.168.1.254",10000);

OutputStream os=s.getOutputStream();

out.write("tcp clinet socket ".getBytes());

s.close();


TCP服务端编写:建立一个服务端的socket服务,并监听一个端口,用accept方法获取连接的客户端对象,当客户端信息发送过来后,服务端要获取得到的数据,并对客户端进行反馈。

ServerSocket ss=new ServerSocket(10000);

Socket s =ss.accept();

InputSteam in=s.getInputStream();

byte[] buf new byte[1024];

int len=in.read(buf);

System.out.println(new String(buf,0,buf.length));

s.close();//这里关闭的是客户端,而不是服务端。



---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值