[关闭]
@MRsunhuimin 2019-08-02T12:55:50.000000Z 字数 4164 阅读 160

java (08.02)

java基础

作者:孙慧敏

1. TCP练习

1.1 客户端向服务端发送一条数据

  1. package com.java_high.Netprogram;
  2. /*
  3. * TCP
  4. */
  5. import java.io.OutputStream;
  6. import java.net.Socket;
  7. /*
  8. * 客户端
  9. * localhost
  10. * 127.0.0.1
  11. * IP地址
  12. *
  13. * 字节流方式
  14. */
  15. public class Demo01 {
  16. public static void main(String[] args) {
  17. try {
  18. //建立客户端Socket连接,指定服务器的位置为本机以及端口为9999
  19. Socket socket = new Socket("localhost",9999);
  20. //打开输入/输出流
  21. OutputStream os = socket.getOutputStream();
  22. //发送客户端信息,向输出流写入信息
  23. String str = "aabb";
  24. os.write(str.getBytes());
  25. socket.shutdownOutput();
  26. os.close();
  27. socket.close();
  28. } catch (Exception e1) {
  29. e1.printStackTrace();
  30. }
  31. }
  32. }
  1. package com.java_high.Netprogram;
  2. import java.io.InputStream;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. /*
  6. * 服务端
  7. */
  8. public class Server01 {
  9. public static void main(String[] args) {
  10. try {
  11. //建立ServerSocket服务器 指定端口 开始监听
  12. ServerSocket serverSocket = new ServerSocket(9999);
  13. //使用accept获取Socket
  14. Socket socket = serverSocket.accept();
  15. InputStream is = socket.getInputStream();
  16. byte by[] = new byte[1024];
  17. is.read(by);
  18. String str1 = new String(by);
  19. System.out.println(str1);
  20. is.close();
  21. socket.close();
  22. serverSocket.close();
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. }

1.2 双向通信(序列化和反序列化)

  1. package com.java_high.Netprogram;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.ObjectOutputStream;
  7. import java.io.OutputStream;
  8. import java.net.Socket;
  9. /*
  10. * TCP
  11. * 序列化和反序列化
  12. */
  13. public class Demo02 {
  14. public static void main(String[] args) {
  15. //初始化
  16. Socket socket = null;
  17. OutputStream out = null;
  18. InputStream in = null;
  19. try {
  20. socket = new Socket("127.0.0.1",7777);
  21. //打开输出流
  22. out = socket.getOutputStream();
  23. //创建用户对象并赋值
  24. User user = new User();
  25. user.setName("张三");
  26. user.setPwd("123abc");
  27. //序列化
  28. ObjectOutputStream oos = new ObjectOutputStream(out);
  29. oos.writeObject(user);
  30. //打开输入流
  31. in = socket.getInputStream();
  32. //接收服务器端响应,从输入流中读取信息
  33. BufferedReader bf = new BufferedReader(new InputStreamReader(in));
  34. String str = null;
  35. while((str=bf.readLine())!=null) {
  36. System.out.println("我是客户端,服务器告诉我:"+str);
  37. }
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }finally {
  41. try {
  42. socket.close();
  43. out.close();
  44. in.close();
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. }
  50. }
  1. package com.java_high.Netprogram;
  2. /*
  3. * 服务端
  4. */
  5. import java.io.InputStream;
  6. import java.io.ObjectInputStream;
  7. import java.io.OutputStream;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10. public class Server02 {
  11. public static void main(String[] args) {
  12. //初始化
  13. ServerSocket serverSocket = null;
  14. Socket socket = null;
  15. OutputStream out = null;
  16. InputStream in = null;
  17. try {
  18. //指定端口并监听
  19. serverSocket = new ServerSocket(7777);
  20. //使用accept()方法等待客户端发送信息
  21. socket = serverSocket.accept();
  22. //打开输入流
  23. in = socket.getInputStream();
  24. //反序列化
  25. ObjectInputStream ois = new ObjectInputStream(in);
  26. User user = (User) ois.readObject();
  27. System.out.println("我是服务器,客户端用户名:"+user.getName()+" 客户端密码:"+user.getPwd());
  28. //打开输出流
  29. out = socket.getOutputStream();
  30. String str = "您登陆成功了";
  31. out.write(str.getBytes());
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }finally {
  35. try {
  36. serverSocket.close();
  37. socket.close();
  38. in.close();
  39. out.close();
  40. } catch (Exception e2) {
  41. e2.printStackTrace();
  42. }
  43. }
  44. }
  45. }
  1. package com.java_high.Netprogram;
  2. import java.io.Serializable;
  3. public class User implements Serializable{
  4. private String name;
  5. private String pwd;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public String getPwd() {
  13. return pwd;
  14. }
  15. public void setPwd(String pwd) {
  16. this.pwd = pwd;
  17. }
  18. }
  1. ###2. UDP练习
  2. ```java
  3. package com.java_high.Netprogram;
  4. /*
  5. * UDP
  6. * 发送端先P后S
  7. */
  8. import java.net.DatagramPacket;
  9. import java.net.DatagramSocket;
  10. import java.net.InetAddress;
  11. public class Demo03 {
  12. public static void main(String[] args) {
  13. String msg = "您好,请问您在吗?";
  14. byte msginfo[] = new byte[1024];
  15. msginfo = msg.getBytes();
  16. try {
  17. InetAddress ia = InetAddress.getByName("localhost");
  18. //构建数据包
  19. //(发送消息(字节),消息长度,InetAddress,端口号)
  20. DatagramPacket dp = new DatagramPacket(msginfo, msginfo.length, ia, 6666);
  21. DatagramSocket ds = new DatagramSocket();
  22. //通过DatagramSocket下send方法 发送DatagramPacket数据包
  23. ds.send(dp);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }
  29. <div class="md-section-divider"></div>
  1. package com.java_high.Netprogram;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. public class Server03 {
  5. public static void main(String[] args) {
  6. DatagramSocket ds = null;
  7. DatagramPacket dp = null;
  8. byte by[] = new byte[1024];
  9. try {
  10. ds = new DatagramSocket(6666);
  11. //(消息容器,消息容器长度)
  12. dp = new DatagramPacket(by, by.length);
  13. //获取数据包,赋给dp
  14. ds.receive(dp);
  15. //将数据包中的数据转换为字符串
  16. String msginfo = new String(by);
  17. System.out.println("我是服务器,客户端说:"+msginfo);
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注