JavaSE-08之网络编程

网络编程

在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换。

网络变成3要素

IP地址 计算机的标识符

端口 应用程序的标识符

协议  计算机间链接和通信的规则  UDP   TCP

 

public class interaddress01 {
   
public static void main(String[] args) throws UnknownHostException {
       
InetAddress address=InetAddress.getByName("PCzhangshen");
       
String name=address.getHostName();
       
String ip=address.getHostAddress();
       
System.out.println("主机名"+name);
       
System.out.println("地址"+ip);
    }
}

网络端口和协议

端口:设备上应用程序的唯一标识符

端口号:用来给那个字节表示,取值范围:0-65535之间,其中0-1023用于一些知名的网络服务和应用,普通的要用1024以上的端口号,如果端口号被一个服务所占用,则会导致当前的应用程序启动失败。

协议:计算机网络中链接和 通信的规则被称为网络通信协议

UDP:无连接协议,数据在传输时不建立逻辑链接,数据是否接受不会受到反馈

消耗资源少,通信效率高,通常用于音频视频和普通数据的传输

但是由于无连接性,不能保证数据完整性,重要数据不建议使用UDP传输。

TCP协议:

面向链接的通信协议,必须要明确客户端和服务器端,每次链接都需要3次握手,

第一次握手:客户端向服务器发送链接请求

二:服务器向客户端会送一个相应

三:客户端发送确认信息,确认链接

三次握手,建立链接之后,客户端和服务器就开始进行数据传输了,保证数据传输的安全性

,用于,上传文件,下载文件,浏览网页。

UDP通信原理

创建发送端的socket对象

创建数据,并且打包

调用DatagamSocket对象的方法发送数据。

import java.io.IOException;
import java.net.*;

public class udpsend01 {
   
public static void main(String[] args) throws IOException {
       
//发送数据需要四部
       
DatagramSocket ds=new DatagramSocket();

       
byte[] bys="hello,udp".getBytes();
       
int length=bys.length;
       
InetAddress  address=InetAddress.getByName("192.168.1.105");
       
int port=10086;

       
DatagramPacket dp=new DatagramPacket(bys,length,address,port);


       
ds.send(dp);

       
ds.close();

    }
}

UDP接收数据

创建接收端的Socket对象

创建数据包,用于接收数据

调用DatagramSocket对象的方法接收数据

解析数据包,并把数据包在控制台显示

关闭接收端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class updresiver01 {
   
public static void main(String[] args) throws IOException {
       
DatagramSocket ds=new DatagramSocket(10086);

       
byte[] bys=new byte[1024];
       
DatagramPacket dp=new DatagramPacket(bys,bys.length);
       
ds.receive(dp);

       
byte[] datas=dp.getData();
       
int len=dp.getLength();
       
String  datastring=new String(datas,0,len);
       
//这里是把转换成字符串
       
System.out.println("数据是:"+datastring);

       
ds.close();

    }
}

改进版:886关闭

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class updresiver02 {
   
public static void main(String[] args) throws IOException {
       
DatagramSocket ds=new DatagramSocket(10086);


       
while(true) {
           
byte[] bys = new byte[1024];
           
DatagramPacket dp = new DatagramPacket(bys, bys.length);
           
ds.receive(dp);

           
byte[] datas = dp.getData();
           
int len = dp.getLength();
           
String datastring = new String(datas, 0, len);
           
//这里是把转换成字符串
           
System.out.println("数据是:" + datastring);
        }



    }
}

package com.it05;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class udpsend02 {
   
public static void main(String[] args) throws IOException {
       
//发送数据需要四部
  
DatagramSocket  ds=new DatagramSocket();

       
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       
String line;
       
while((line=br.readLine())!=null) {
           
if ("886".equals(line)) {
               
break;
            }


           
byte[] bys = line.getBytes();
           
int length = bys.length;
           
InetAddress address = InetAddress.getByName("192.168.1.105");
           
int port = 10086;
           
DatagramPacket dp = new DatagramPacket(bys, length, address, port);

           
ds.send(dp);
        }

       
ds.close();

    }
}

TCP通信程序

TCP通信协议是一种可靠的网络协议,他在通信的两端各自建立一个Socket对象,从而在通信的两端形成虚拟网络链路,一旦建立了虚拟网络链路,两端死亡程序就可以通过虚拟链路进行通信,

Java对基于TCP协议的网络提供了良好的封装,使用socket对象来代表两端的通信端口,并通过socket产生IO流进行通信

Java为客户端提供了socket类,为服务器端提供了serversocket类

发送数据的步骤:

创建客户端的socket对象

获取输出流,写数据

释放资源


import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.SocketHandler;

public class tcpsend01 {
   
public static void main(String[] args) throws IOException {
       
Socket s=new Socket("192.168.1.105",10000);

       
OutputStream  os=s.getOutputStream();
       
os.write("hello tcp,我老了".getBytes());

       
s.close();
    }
}

348;;tcp接收数据

创建服务器端的socket对象sercersocket

先监听

获取输入流,读数据,并且把数据显示在控制台

释放资源

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class tcpsresiver01 {
   
public static void main(String[] args) throws IOException {
       
ServerSocket  ss=new ServerSocket(10000);

       
Socket s=ss.accept();

       
InputStream is=s.getInputStream();
       
byte[]  bys=new byte[1024];
       
int len=is.read(bys);
       
String data=new String(bys,0,len);
       
System.out.println("数据是"+data);

       
s.close();
       
ss.close();

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值