高级特性五|网络编程

网络编程

Socket传输String

服务器
   try {
            //创建服务器Socket 指定端口并开始监听
            ServerSocket serverSocket = new ServerSocket(8800);
            //通过accept等待客户端触发通信
            Socket socket = serverSocket.accept();
            //打开输入流输出流
            InputStream is =socket.getInputStream();
            //获取客户端信息
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;
            while (!((info = br.readLine())==null)){
                System.out.println("我是服务器,客户端登录信息为:"+info);
            }
            br.close();
            is.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
客户端
       //创建客户端Socket连接 用来指定服务器的位置以及端口
        try {
            Socket socket = new Socket("localhost",8800);
            //打开输入输出流
            OutputStream os = socket.getOutputStream();
            //准备信息
            String info="用户名: tom 密码: 123456";
            os.write(info.getBytes());
            //关闭资源
            os.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }


Socket传输对象

服务器
try {
      //创建服务器Socket 指定端口并开始监听
      ServerSocket serverSocket = new ServerSocket(8800);
      //通过accept等待客户端触发通信
      Socket socket = serverSocket.accept();
      //打开输入流输出流
      InputStream is =socket.getInputStream();

      ObjectInputStream ois = new ObjectInputStream(is);
      User user = (User)ois.readObject();
      System.out.println("我是服务器 接收到的信息:"+user.getUserName()+"--"+user.getPWB());
      is.close();
      socket.close();
      serverSocket.close();
  } catch (IOException e) {
      e.printStackTrace();
  } catch (ClassNotFoundException e) {
      e.printStackTrace();
  }
客户端
  //创建客户端Socket连接 用来指定服务器的位置以及端口
  try {
      Socket socket = new Socket("localhost",8800);
      //打开输入输出流
      OutputStream os = socket.getOutputStream();
      User u = new User("TOM","123456");
      ObjectOutputStream oos = new ObjectOutputStream(os);
      oos.writeObject(u);
      socket.shutdownOutput();


      String info="用户名: tom 密码: 123456";
      os.write(info.getBytes());*/
      //关闭资源
      oos.close();
      os.close();
      socket.close();

  } catch (IOException e) {
      e.printStackTrace();
  }
方法类 调用 Serializable 接口
   
public class User implements Serializable {
//属性
private String userName;
private String PWB;

public User(String userName, String PWB) {
  this.userName = userName;
  this.PWB = PWB;
}

public User() {
}

public String getUserName() {
  return userName;
}

public void setUserName(String userName) {
  this.userName = userName;
}

public String getPWB() {
  return PWB;
}

public void setPWB(String PWB) {
  this.PWB = PWB;
}
}

Socket线程使用

服务器 
try {
      //创建服务器Socket 指定端口并开始监听
      ServerSocket serverSocket = new ServerSocket(8800);
      //通过accept等待客户端触发通信
      Socket socket = null;
      //监听一直在进行
      while (true){
          socket = serverSocket.accept();
          LoginThread loginThread = new LoginThread(socket);
          loginThread.start();
      }
  } catch (IOException e) {
      e.printStackTrace();
  }
客户端  
 //创建客户端Socket连接 用来指定服务器的位置以及端口
 try {
     Socket socket = new Socket("localhost",8800);
     //打开输入输出流
     OutputStream os = socket.getOutputStream();
     User u = new User("TOM","1213456783");
     ObjectOutputStream oos = new ObjectOutputStream(os);
     oos.writeObject(u);
     socket.shutdownOutput();

      String info="用户名: tom 密码: 123456";
      os.write(info.getBytes());*/
      //关闭资源
      oos.close();
      os.close();
      socket.close();

  } catch (IOException e) {
      e.printStackTrace();
  }
线程类
    
public class LoginThread extends Thread{
Socket socket = null;
//每启动一个线程 都需要想对象的Socket
public LoginThread(Socket socket) {
    this.socket = socket;
}

@Override
public void run() {
    try {
        InputStream is =socket.getInputStream();

        ObjectInputStream ois = new ObjectInputStream(is);
        User user = (User)ois.readObject();
        System.out.println("我是服务器 接收到的信息:"
                   +user.getUserName()+"--"+user.getPWB());
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

UDP协议的Socket编程

服务器

byte[] infos = new byte[1024];
  //服务器
  DatagramSocket socket = null;
  try {
      DatagramPacket dp = new DatagramPacket(infos , infos.length);
      socket = new DatagramSocket(5000);
      //接受客户端的数据包
      socket.receive(dp);
      String info = new String(dp.getData(),0,dp.getData().length);
      System.out.println(dp.getAddress().getHostAddress()+"说: "+info);
  } catch (IOException e) {
      e.printStackTrace();
  } finally {
      socket.close();
  }

客户端

  DatagramSocket socket = null;
  //客户端
  String info = "你好我想资讯一个问题";
  byte[] infos = info.getBytes();
  try {
      InetAddress ia = InetAddress.getByName("localhost");
      DatagramPacket dp = new DatagramPacket(infos,infos.length,ia,5000);
      //客户端使用Socaet对象
      socket = new DatagramSocket();
      //通过DatagramSocket 对象发送数据包到服务器中
      socket.send(dp);

  } catch (UnknownHostException | SocketException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  } finally {
      socket.close();
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值