X  
登录

还没有账号?立即注册

忘记密码?
登陆
X  
注册

已经有账号?马上登陆

获取验证码
重新获取(60s)
立即注册
统计
  • 建站日期:2021-03-10
  • 文章总数:518 篇
  • 评论总数:155 条
  • 分类总数:32 个
  • 最后更新:4月20日
文章 未分类

java网络编程code

梦幻书涯
首页 未分类 正文

package cn.itcast_02;

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

/*
 * UDP协议接收数据:
 * A:创建接收端Socket对象
 * B:创建一个数据包(接收容器)
 * C:调用Socket对象的接收方法接收数据
 * D:解析数据包,并显示在控制台
 * E:释放资源
 */
public class ReceiveDemo {
 public static void main(String[] args) throws IOException {
  // 创建接收端Socket对象
  // DatagramSocket(int port)
  DatagramSocket ds = new DatagramSocket(10086);

  // 创建一个数据包(接收容器)
  // DatagramPacket(byte[] buf, int length)
  byte[] bys = new byte[1024];
  int length = bys.length;
  DatagramPacket dp = new DatagramPacket(bys, length);

  // 调用Socket对象的接收方法接收数据
  // public void receive(DatagramPacket p)
  ds.receive(dp); // 阻塞式

  // 解析数据包,并显示在控制台
  // 获取对方的ip
  // public InetAddress getAddress()
  InetAddress address = dp.getAddress();
  String ip = address.getHostAddress();
  // public byte[] getData():获取数据缓冲区
  // public int getLength():获取数据的实际长度
  byte[] bys2 = dp.getData();
  int len = dp.getLength();
  String s = new String(bys2, 0, len);
  System.out.println(ip + "传递的数据是:" + s);

  // 释放资源
  ds.close();
 }
}

 

 

 

package cn.itcast_04;

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

/*
 * 多次启动接收端:
 *   java.net.BindException: Address already in use: Cannot bind
 *   端口被占用。
 */
public class ReceiveDemo {
 public static void main(String[] args) throws IOException {
  // 创建接收端的Socket对象
  DatagramSocket ds = new DatagramSocket(12345);

  while (true) {
   // 创建一个包裹
   byte[] bys = new byte[1024];
   DatagramPacket dp = new DatagramPacket(bys, bys.length);

   // 接收数据
   ds.receive(dp);

   // 解析数据
   String ip = dp.getAddress().getHostAddress();
   String s = new String(dp.getData(), 0, dp.getLength());
   System.out.println("from " + ip + " data is : " + s);
  }

  // 释放资源
  // 接收端应该一直开着等待接收数据,是不需要关闭
  // ds.close();
 }
}

 

package cn.itcast_01;

import java.net.InetAddress;
import java.net.UnknownHostException;

/*
 * 如果一个类没有构造方法:
 * A:成员全部是静态的(Math,Arrays,Collections)
 * B:单例设计模式(Runtime)
 * C:类中有静态方法返回该类的对象(InetAddress)
 *   class Demo {
 *    private Demo(){}
 *
 *    public static Demo getXxx() {
 *     return new Demo();
 *    }
 *   }
 *
 * 看InetAddress的成员方法:
 * public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
 */
public class InetAddressDemo {
 public static void main(String[] args) throws UnknownHostException {
  // public static InetAddress getByName(String host)
  // InetAddress address = InetAddress.getByName("liuyi");
  // InetAddress address = InetAddress.getByName("192.168.12.92");
  InetAddress address = InetAddress.getByName("192.168.12.63");

  // 获取两个东西:主机名,IP地址
  // public String getHostName()
  String name = address.getHostName();
  // public String getHostAddress()
  String ip = address.getHostAddress();
  System.out.println(name + "---" + ip);
 }
}

 

package cn.itcast_02;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
 * UDP协议发送数据:
 * A:创建发送端Socket对象
 * B:创建数据,并把数据打包
 * C:调用Socket对象的发送方法发送数据包
 * D:释放资源
 */
public class SendDemo {
 public static void main(String[] args) throws IOException {
  // 创建发送端Socket对象
  // DatagramSocket()
  DatagramSocket ds = new DatagramSocket();

  // 创建数据,并把数据打包
  // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
  // 创建数据
  byte[] bys = "hello,udp,我来了".getBytes();
  // 长度
  int length = bys.length;
  // IP地址对象
  InetAddress address = InetAddress.getByName("192.168.12.92");
  // 端口
  int port = 10086;
  DatagramPacket dp = new DatagramPacket(bys, length, address, port);

  // 调用Socket对象的发送方法发送数据包
  // public void send(DatagramPacket p)
  ds.send(dp);

  // 释放资源
  ds.close();
 }
}

 

package cn.itcast_05;

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 SendThread implements Runnable {

 private DatagramSocket ds;

 public SendThread(DatagramSocket ds) {
  this.ds = ds;
 }

 @Override
 public void run() {
  try {
   // 封装键盘录入数据
   BufferedReader br = new BufferedReader(new InputStreamReader(
     System.in));
   String line = null;
   while ((line = br.readLine()) != null) {
    if ("886".equals(line)) {
     break;
    }

    // 创建数据并打包
    byte[] bys = line.getBytes();
    // DatagramPacket dp = new DatagramPacket(bys, bys.length,
    // InetAddress.getByName("192.168.12.92"), 12345);
    DatagramPacket dp = new DatagramPacket(bys, bys.length,
      InetAddress.getByName("192.168.12.255"), 12306);

    // 发送数据
    ds.send(dp);
   }

   // 释放资源
   ds.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

 

 

package cn.itcast_03;

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

public class SendDemo {
 public static void main(String[] args) throws IOException {
  // 创建发送端的Socket对象
  DatagramSocket ds = new DatagramSocket();

  // 创建数据并打包
  byte[] bys = "helloworld".getBytes();
  DatagramPacket dp = new DatagramPacket(bys, bys.length,
    InetAddress.getByName("192.168.12.92"), 12345);

  // 发送数据
  ds.send(dp);

  // 释放资源
  ds.close();
 }
}

 

 

package cn.itcast_04;

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 SendDemo {
 public static void main(String[] args) throws IOException {
  // 创建发送端的Socket对象
  DatagramSocket ds = new DatagramSocket();

  // 封装键盘录入数据
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  String line = null;
  while ((line = br.readLine()) != null) {
   if ("886".equals(line)) {
    break;
   }

   // 创建数据并打包
   byte[] bys = line.getBytes();
   // DatagramPacket dp = new DatagramPacket(bys, bys.length,
   // InetAddress.getByName("192.168.12.92"), 12345);
   DatagramPacket dp = new DatagramPacket(bys, bys.length,
     InetAddress.getByName("192.168.12.255"), 12345);

   // 发送数据
   ds.send(dp);
  }

  // 释放资源
  ds.close();
 }
}

 

package cn.itcast_06;

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

/*
 * TCP协议发送数据:
 * A:创建发送端的Socket对象
 *   这一步如果成功,就说明连接已经建立成功了。
 * B:获取输出流,写数据
 * C:释放资源
 *
 * 连接被拒绝。TCP协议一定要先看服务器。
 * java.net.ConnectException: Connection refused: connect
 */
public class ClientDemo {
 public static void main(String[] args) throws IOException {
  // 创建发送端的Socket对象
  // Socket(InetAddress address, int port)
  // Socket(String host, int port)
  // Socket s = new Socket(InetAddress.getByName("192.168.12.92"), 8888);
  Socket s = new Socket("192.168.12.92", 8888);

  // 获取输出流,写数据
  // public OutputStream getOutputStream()
  OutputStream os = s.getOutputStream();
  os.write("hello,tcp,我来了".getBytes());

  // 释放资源
  s.close();
 }
}

 

 

package cn.itcast_07;

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

public class ServerDemo {
 public static void main(String[] args) throws IOException {
  // 创建服务器Socket对象
  ServerSocket ss = new ServerSocket(9999);

  // 监听客户端的连接
  Socket s = ss.accept(); // 阻塞

  // 获取输入流
  InputStream is = s.getInputStream();
  byte[] bys = new byte[1024];
  int len = is.read(bys); // 阻塞
  String server = new String(bys, 0, len);
  System.out.println("server:" + server);

  // 获取输出流
  OutputStream os = s.getOutputStream();
  os.write("数据已经收到".getBytes());

  // 释放资源
  s.close();
  // ss.close();
 }
}

 

 

package cn.itcast_06;

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

/*
 * TCP协议接收数据:
 * A:创建接收端的Socket对象
 * B:监听客户端连接。返回一个对应的Socket对象
 * C:获取输入流,读取数据显示在控制台
 * D:释放资源
 */
public class ServerDemo {
 public static void main(String[] args) throws IOException {
  // 创建接收端的Socket对象
  // ServerSocket(int port)
  ServerSocket ss = new ServerSocket(8888);

  // 监听客户端连接。返回一个对应的Socket对象
  // public Socket accept()
  Socket s = ss.accept(); // 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。

  // 获取输入流,读取数据显示在控制台
  InputStream is = s.getInputStream();

  byte[] bys = new byte[1024];
  int len = is.read(bys); // 阻塞式方法
  String str = new String(bys, 0, len);

  String ip = s.getInetAddress().getHostAddress();

  System.out.println(ip + "---" + str);

  // 释放资源
  s.close();
  // ss.close(); //这个不应该关闭
 }
}

 

package cn.itcast_08;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {
 public static void main(String[] args) throws IOException {
  // 创建服务器Socket对象
  ServerSocket ss = new ServerSocket(22222);

  // 监听客户端连接
  Socket s = ss.accept();

  // 包装通道内容的流
  BufferedReader br = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
  String line = null;
  while ((line = br.readLine()) != null) {
   System.out.println(line);
  }

  // br.close();
  s.close();
  // ss.close();
 }
}

package cn.itcast_08;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

/*
 * 客户端键盘录入,服务器输出到控制台
 */
public class ClientDemo {
 public static void main(String[] args) throws IOException {
  // 创建客户端Socket对象
  Socket s = new Socket("192.168.12.92", 22222);

  // 键盘录入数据
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  // 把通道内的流给包装一下
  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
    s.getOutputStream()));

  String line = null;
  while ((line = br.readLine()) != null) {
   // 键盘录入数据要自定义结束标记
   if ("886".equals(line)) {
    break;
   }
   bw.write(line);
   bw.newLine();
   bw.flush();
  }

  // 释放资源
  // bw.close();
  // br.close();
  s.close();
 }
}

 

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2019-6-9,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
类名.class 类名.this 详解
« 上一篇
IO一些重要知识
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。
登陆 注册
永远的少年,永远的梦

热门文章