java网络编程学习详解和总结!

来源:互联网 发布:淘宝网御龙在天激活码 编辑:程序博客网 时间:2024/06/13 04:34

网络:

网络编程三要素:

1IP地址:唯一标识网络上的每一台计算机两台计算机之间通信的必备有素

2、端口号:计算机中应用的标号(代表一个应用程序)0-1024系统使用或保留端口 ,有效端口0-65536

3、通信协议:通信的规则TCP,UDP

IP地址所对应的对象->InetAddress

传输协议:

1、UDP相当于发短信(有字数限制),不需要建立连接,数据包的大小限制在64K内,效率较高,不安全,容易丢包。

2、TCP相当于打电话,需要建立连接,效率相对比较低,数据传输安全,三次握手完成。

InetAddress类:

public class InetAddressDemo {public static void main(String[] args) throws Exception {// TODO Auto-generated method stubInetAddress ia=InetAddress.getByName("www.baidu.com");System.out.println(ia.getHostAddress());  //获取ipSystem.out.println(ia.getHostName()); //获取主机名InetAddress l = InetAddress.getLocalHost();  //获取本机的IP信息System.out.println(l);  InetAddress[] ad = InetAddress.getAllByName("T"); //根据主机名返回所有IP地址for(InetAddress s:ad){System.out.println(s);}}}

基于TCP协议的Socket编程:

客户端:


public class Client {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubSocket s=new Socket("127.0.0.1",8800);BufferedReader line=new BufferedReader(new InputStreamReader(System.in));OutputStream os = s.getOutputStream();String str=null;while((str=line.readLine())!=null){if(str.equals("exit")){ break;}os.write(str.getBytes());}s.shutdownOutput();s.shutdownInput();os.close();line.close();s.close();}}


服务器端:

 

public class Srever {public static void main(String[] args) throws IOException {// TODO Auto-generated method stub//创建一个服务器端的套接字ServerSocket ss=new ServerSocket(8800);Socket s = ss.accept();InputStream is = s.getInputStream();byte b[]=new byte[1024];while(is.read(b)!=-1){System.out.println(new String(b));}s.shutdownInput();}}

UDP通信:

Datagram(数据报):是分组交换的一种形式,就是把所传递的数据分段打成“包”,再传送出去。与传统的“连接型”分组交换不同,它属于“无连接型”,是把打包成的每个“包”(分组)都作为一个“独立的报文”传送出去,所以叫做“数据报”。在开始通信之前不需要先连接好一条线路,各个数据报不一定都通过同一条路径传输。

 UDP通讯服务器端:

public class UDP2 {public static void main(String[] args) {try {DatagramSocket ds=new DatagramSocket(4321);byte[] data=new byte[1024];//定义接受地缓冲区DatagramPacket dp=new DatagramPacket(data,data.length);ds.receive(dp);//接收数据包//以下是将接收到的字节数组转换为字符串并输出显示String mes=new String(dp.getData(),0,dp.getLength());System.out.println(mes);} catch (Exception e) {e.printStackTrace();}}} 
UDP通讯客户端
public class UDP1 {public static void main(String[] args) {try {DatagramSocket ds=new DatagramSocket(1234);String mes="你好,UDP2.";byte[] data=mes.getBytes();//将字符串转换为byte数组InetAddress ip=InetAddress.getByName("127.0.0.1");DatagramPacket dp=new DatagramPacket(data,data.length,ip,4321);ds.send(dp);//发送数据包} catch (Exception e) {e.printStackTrace();}}} 

TCPUDP的比较:

1、使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。

2、使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。