码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程

时间:2019-06-28 00:59:50      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:返回   客户   send   虚拟   com   socket   使用   sso   serve   

1、使用UDP协议实现通信功能

服务器端程序

package LESSON13;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPserver {
    /**
     * 接受数据
    DatagramPacket(byte[] buf, int offset, int length) 构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。
     */
    public static void main(String[] args) throws Exception {
        DatagramSocket server = new DatagramSocket(8888);//创建服务器       
        byte b[]=new byte[1024];     
        
        //DatagramPacket(byte[] buf, int length) 
        //构造 DatagramPacket,用来接收长度为 length 的数据包。
        DatagramPacket dp=new DatagramPacket(b,b.length);
        System.out.println(1);
        server.receive(dp);//阻塞
        System.out.println(2);
        
        //解析数据
        // byte[] getAddress()  返回此 InetAddress 对象的原始 IP 地址。 
         InetAddress address=dp.getAddress();    
         //byte[] getData() 返回数据缓冲区。 
         byte data[]=dp.getData();                  
         //int getLength() 返回将要发送或接收到的数据的长度。 
         int length=dp.getLength();
        
         // String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 
         System.out.println("sender:"+address.getHostAddress());
         System.out.println(new String(data).trim()+"\t"+length);
        
        server.close();
    
    }

}

客户端程序

package LESSON13;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class UDPclient {
    /**
     *DatagramSocket() 创建Socet对象并随机分配端口号
     *DatagramSocket(int port) 创建Socet对象并指定端口号

          发送数据
    DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
 
     */
    public static void main(String[] args) throws Exception {
        //创建客户端
        DatagramSocket client = new DatagramSocket();
        
        //InetAddress 此类表示互联网协议 (IP) 地址。 
        //static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。     
        InetAddress address=InetAddress.getByName("localhost");//获取本地IP地址
        
        
        byte b[]="我是客户端".getBytes();
        DatagramPacket dp=new DatagramPacket(b,b.length,address,8888);//把数据打包
        
        client.send(dp);//发送数据包
        client.close();//关闭
        

    }

}

先运行服务端,虚拟灯一直亮着等待客户端发送数据

技术图片

再运行客户端,然后回到服务端console

技术图片

2、使用TCP是实现服务与客户端通信

服务端程序

package LESSON13;

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

public class TCPserver {

    /**
     使用TCP接收数据
     创建接收端Socket对象
     监听(阻塞)
     获取输入流对象
     获取数据
     输出数据
     释放资源
     
     
     ServerSocket此类实现服务器套接字。
     ServerSocket(int port) 
          创建绑定到特定端口的服务器套接字
     * @throws Exception 
     
     
     */
    public static void main(String[] args) throws Exception {    
        ServerSocket server = new ServerSocket(9999);// 创建接收端Socket对象        
        Socket s = server.accept();//监听(阻塞)等待连接
        
        //通信
        InputStream in=s.getInputStream();// 获取输入流对象(接收数据)        
        byte b[]=new byte[1024];
        in.read(b);//接收客户端发来的信息    
    
        
        OutputStream out=s.getOutputStream();//获取输出流对象(发送数据)
        out.write("你好,我是服务器".getBytes());//向客户端发送信息
        
            
        // InetAddress getInetAddress() 返回套接字连接的地址。 
        InetAddress address = s.getInetAddress();        
        System.out.println("client"+"\t"+address.getHostAddress());
        System.out.println(new String(b).trim());
        
        in.close();
        s.close();
        //ss.close();
        
        
        
        
        

    }

}

客户端程序

package LESSON13;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class TCPclient {

    /**
    使用TCP发送数据
    创建发送端Socket对象(创建连接)
    获取输出流对象
    发送数据
    释放资源
    Socket(InetAddress address, int port) 
          创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
          
     Exception in thread "main" java.net.ConnectException: Connection refused: connect
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        InetAddress address=InetAddress.getByName("localhost");//获取本地IP地址
        Socket client=new Socket(address, 9999);//创建发送端Socket对象(创建连接)
        //通信
        OutputStream out=client.getOutputStream();//获取输出流对象(发送数据)
        out.write("服务器你好,我是客户端".getBytes());//发送数据
        
        
        InputStream in=client.getInputStream();//获取输入流睡醒(接收数据)
        byte b[]=new byte[1024];
        in.read(b);//接收服务器发送来的信息
        System.out.println(new String(b).trim());
        
        out.close();
        client.close();
        
        
        
        
        

    }

}

先运行服务端,再运行客户端

技术图片

技术图片

 

网络编程

标签:返回   客户   send   虚拟   com   socket   使用   sso   serve   

原文地址:https://www.cnblogs.com/qfdy123/p/11100320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!