黑马程序员-----------网络编程

来源:互联网 发布:linux安装amd显卡驱动 编辑:程序博客网 时间:2024/06/06 03:23

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

需要用到的类:

Socket:

此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

ServerSocket:

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。 

DatagramSocket:

此类表示用来发送和接收数据报包的套接字。(用于udp)


UDP与TCP的区别:

UDP特点:
   1.将发送的数据打包;
   2.面向无连接,发送时,不关心对方是否接收。
   3.每个数据报的大小在限制在64k;
   4.因为不需要连接,所以:不可靠。但速度快;
   例如:广播电台,电视台发送信号;
TCP特点:
  1.发送时,必须建立连接。必须存在接收方,否则不能发送;
  2.由于需要建立连接,所以:可靠。但速度(连接速度)会相对慢一些,因为要进行一些连接验证;


下面举例一个使用udp传送数据的案例:

数据发送端:

/* *发送端: * * 1.建立Scanner对象; * 2.建立DatagramSocket对象; * 3.从控制台读取一行数据,就封装一个新的数据报,发送; * 4.当控制台输入886时,结束; */public class UDPSend {public static void main(String[] args) throws Exception {Scanner sc = new Scanner(System.in);DatagramSocket socket = new DatagramSocket();while(true){System.out.print("请输入信息:");String info = sc.next();//封装数据报DatagramPacket pak = new DatagramPacket(info.getBytes(),info.getBytes().length,InetAddress.getByName("Lenovo-PC"),8888);//发送数据socket.send(pak);//判断是否是886if(info.equals("886")){break;}}//释放资源socket.close();System.out.println("发送端结束!");}}

数据接收端:

/* * 接收端,只需要循环接收,遇到接收的是886时,结束。 */public class UDPReceive {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(8888);byte[] byteArray = new byte[1024];DatagramPacket pak= new DatagramPacket(byteArray,byteArray.length);//要多次接收,使用循环while(true){socket.receive(pak);byte[] infoArray = pak.getData();String info = new String(infoArray,0,pak.getLength());System.out.println("接收到信息:" + info);if(info.equals("886")){System.out.println("对方下线了,我也不玩了,拜拜......");break;}}//释放资源socket.close();}}

在来一个使用TCP发送和接收文件的案例:

发送端:

public class Client {public static void main(String[] args) {Scanner sc =new Scanner(System.in);while(true){System.out.print("输入一个文件路径:");String q=sc.nextLine();try {Socket sk=new Socket("127.0.0.1",1333);BufferedInputStream bfin=new BufferedInputStream(new FileInputStream(q));BufferedOutputStream bfout=new BufferedOutputStream(sk.getOutputStream());byte[] bytearr=new byte[1024];int len=0;while((len=bfin.read(bytearr))!=-1){bfout.write(bytearr,0,len);}sk.shutdownOutput();byte[] bytearr1=new byte[10];InputStream in=sk.getInputStream();int len1=in.read(bytearr1);String s=new String(bytearr1,0,len1);System.out.println(s);bfin.close();bfout.close();in.close();sk.close();} catch (IOException e) {System.out.println("无法连接到服务器");}}}}
接收端:

public class server {public static void main(String[] args) {try {while(true){ServerSocket ss=new ServerSocket(1333);System.out.println("等待连接");Socket sk=ss.accept();System.out.println("客户端已连接");BufferedInputStream bfin=new BufferedInputStream(sk.getInputStream());BufferedOutputStream bfout =new BufferedOutputStream(new FileOutputStream("E:\\1.avi"));byte[] bytearr=new byte[1024];int len=0;while((len=bfin.read(bytearr))!=-1){bfout.write(bytearr, 0, len);}OutputStream out=sk.getOutputStream();out.write("上传完毕".getBytes());bfin.close();bfout.close();out.close();sk.close();ss.close();}} catch (IOException e) {}}}



0 0
原创粉丝点击