1.网络编程中有两个主要的问题

1.如何准确定位到网络上的一台主机或者多台主机
2.找到主机之后如何进行通信

2.网络编程中的要素

1.ip 和 端口号
2.网络通信协议 udp ,tcp

3.IP

ip 在java中有个 类:InetAddress
123.0.0.1是本机的ip地址
ip地址的分类
ipv4 和 ipv6
ipv4: 127.0.0.1 0~255 共40亿个
ipv6:128位,8个无符号整数

4.TCP/IP

1.TCP/IP简介

TCP:场景:打电话
面向连接的可靠的传输协议
三次握手。四次挥手
客户端服务端
传输完成,释放连接 ,效率低
UDP场景:发短信
不连接,不稳定的
客户端。服务端没有明确的界限
不管有没有准备好,都可以发给你

2.案例1TCP实现的聊天

基于TCP实现的网络编程
总结来说就是
客户端:1.需要得到服务端的ip地址和端口号,通过套接字,创建连接
2.通过套接字创建输出流将自己想传输的数据传输给指定的服务端
服务端:1.需要创建一个指定端口号的serverSocket,
2.等待客户端连接。使用accpt监听连接的客户端,返回值是一个socket
3.通过这个socket读入客户端发送过来的数据。
客户端

  1. /**
  2. * @Author Rookie Coder
  3. * @Description 客户端
  4. * @Date
  5. **/
  6. public class ClientSocket {
  7. public static void main(String[] args) {
  8. OutputStream outputStream = null;
  9. Socket socket = null;
  10. // 获取服务端ip地址
  11. try {
  12. InetAddress in1 = InetAddress.getByName("127.0.0.1");
  13. // 获取服务端端口号
  14. int port = 8080;
  15. // 创建一个socket
  16. socket = new Socket(in1,port);
  17. outputStream = socket.getOutputStream();
  18. for (int i = 0; i < 50; i++) {
  19. outputStream.write("你好客户端,我是小柒".getBytes());
  20. }
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }finally {
  24. if (outputStream!=null){
  25. try {
  26. outputStream.close();
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. if (socket!=null){
  32. try {
  33. socket.close();
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }
  39. }
  40. }

服务端:

  1. /**
  2. * @Author Rookie Coder
  3. * @Description 服务端
  4. * @Date
  5. **/
  6. public class MyServerSocket {
  7. public static void main(String[] args) {
  8. ServerSocket serverSocket = null;
  9. InputStream inputStream = null;
  10. ByteArrayOutputStream bos = null;
  11. Socket socket = null;
  12. try{
  13. // 创建一个服务端 端口号为8080
  14. serverSocket = new ServerSocket(8080) ;
  15. while (true){
  16. // 持续监听接收到的客户端
  17. socket = serverSocket.accept();
  18. // 获取客户端发来的消息
  19. inputStream = socket.getInputStream();
  20. // 建立一个管道流
  21. bos = new ByteArrayOutputStream();
  22. byte[] bytes = new byte[1024];
  23. int len;
  24. while ((len=inputStream.read(bytes))!=-1){
  25. bos.write(bytes,0,len);
  26. }
  27. System.out.println(bos);
  28. }
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }finally {
  32. if (bos!=null){
  33. try {
  34. bos.close();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. if (inputStream!=null){
  40. try {
  41. inputStream.close();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. if (socket!=null){
  47. try {
  48. socket.close();
  49. } catch (IOException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. }
  54. }
  55. }

3.案例2:TCP实现文件上传

客户端:

  1. **
  2. * @Author Rookie Coder
  3. * @Description 文件上传客户端
  4. * @Date
  5. **/
  6. public class MyClientSocket {
  7. public static void main(String[] args) {
  8. // 1.创建一个socket,传入服务端ip 和服务端 端口号
  9. Socket socket = null;
  10. OutputStream outputStream = null;
  11. FileInputStream fi1 = null;
  12. try {
  13. socket = new Socket(InetAddress.getByName("127.0.0.1"),8081);
  14. // 2.创建输入流,读取要上传的文件
  15. fi1 = new FileInputStream(new File("D:/JAVAStudy/IDEAWorkSpace/javaSECode/JavaSEReview/java_9netword/src/2.jpg"));
  16. // 3.创建输出流,输出给服务端
  17. outputStream = socket.getOutputStream();
  18. byte[] bytes = new byte[1024];
  19. int len;
  20. while ((len=fi1.read(bytes))!=-1){
  21. outputStream.write(bytes,0,len);
  22. }
  23. } catch (UnknownHostException e) {
  24. e.printStackTrace();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }finally {
  28. if (outputStream!=null){
  29. try {
  30. outputStream.close();
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. if (fi1!=null){
  36. try {
  37. fi1.close();
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. if (socket!=null){
  43. try {
  44. socket.close();
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. }
  50. }
  51. }
  52. **
  53. * @Author Rookie Coder
  54. * @Description 文件上传客户端
  55. * @Date
  56. **/
  57. public class MyClientSocket {
  58. public static void main(String[] args) {
  59. // 1.创建一个socket,传入服务端ip 和服务端 端口号
  60. Socket socket = null;
  61. OutputStream outputStream = null;
  62. FileInputStream fi1 = null;
  63. try {
  64. socket = new Socket(InetAddress.getByName("127.0.0.1"),8081);
  65. // 2.创建输入流,读取要上传的文件
  66. fi1 = new FileInputStream(new File("D:/JAVAStudy/IDEAWorkSpace/javaSECode/JavaSEReview/java_9netword/src/2.jpg"));
  67. // 3.创建输出流,输出给服务端
  68. outputStream = socket.getOutputStream();
  69. byte[] bytes = new byte[1024];
  70. int len;
  71. while ((len=fi1.read(bytes))!=-1){
  72. outputStream.write(bytes,0,len);
  73. }
  74. } catch (UnknownHostException e) {
  75. e.printStackTrace();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }finally {
  79. if (outputStream!=null){
  80. try {
  81. outputStream.close();
  82. } catch (IOException e) {
  83. e.printStackTrace();
  84. }
  85. }
  86. if (fi1!=null){
  87. try {
  88. fi1.close();
  89. } catch (IOException e) {
  90. e.printStackTrace();
  91. }
  92. }
  93. if (socket!=null){
  94. try {
  95. socket.close();
  96. } catch (IOException e) {
  97. e.printStackTrace();
  98. }
  99. }
  100. }
  101. }
  102. }

服务端:

  1. /**
  2. * @Author Rookie Coder
  3. * @Description 文件上传服务端
  4. * @Date
  5. **/
  6. public class MyServerSocket {
  7. public static void main(String[] args) {
  8. // 1. 创建一个Serversocket
  9. Socket accept = null;
  10. InputStream inputStream = null;
  11. FileOutputStream f1 = null;
  12. ServerSocket serverSocket = null;
  13. try {
  14. serverSocket = new ServerSocket(8081);
  15. // 监听发送数据的客户端
  16. accept = serverSocket.accept();
  17. // 输出客户端所传输过来的数据
  18. inputStream = accept.getInputStream();
  19. // 创建一个管道流
  20. f1 = new FileOutputStream(new File("revice.jpg"));
  21. byte[] bytes = new byte[1024];
  22. int len;
  23. while ((len=inputStream.read(bytes))!=-1){
  24. f1.write(bytes,0,len);
  25. }
  26. System.out.println(f1);
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. }finally {
  30. if (f1 !=null){
  31. try {
  32. f1.close();
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. if (inputStream!=null){
  38. try {
  39. inputStream.close();
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. if (accept!=null){
  45. try {
  46. accept.close();
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. if (serverSocket!=null){
  52. try {
  53. serverSocket.close();
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. }
  59. }
  60. }