Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一。Java 网络编程又包括 TCP、UDP,URL 等模块。TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块。URL 对应 URL 模块。其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议。两者之间的异同就不在这里说了,推荐一本入门书籍 《TCPIP入门经典》。我们开始 Socket 服务端和客户端编程吧。

 一、【Socket 服务端】

  1. package www.rockcode.com.tnetty.server;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.PrintWriter;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9.  
  10. /**
  11. * @author xums
  12. * SocketServer
  13. * TODO
  14. * 2017年5月4日-上午11:07:49
  15. */
  16. public class SocketServer {
  17.  
  18. public static void main(String[] args) {
  19.  
  20. SocketServer server = new SocektServer();
    server.init();
  21.  
  22. }
  23.  
  24. public void init(){
  25.  
  26. ServerSocket serverSocket = null;
  27. Socket socket = null;
  28. BufferedReader br = null;
  29. PrintWriter pw = null;
  30. try {
  31. serverSocket = new ServerSocket(9999);
  32. socket = serverSocket.accept();
  33.  
  34. br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  35. pw = new PrintWriter(socket.getOutputStream());
  36. String msg = br.readLine();
  37.  
  38. while(null!=msg){
  39. System.out.println("收到消息:"+msg);
  40. msg = br.readLine();
  41. }
  42.  
  43. } catch (IOException e) {
  44. e.printStackTrace();
  45. }finally{
  46. if(null!=pw){
  47. pw.close();
  48. }
  49.  
  50. if(null!=br){
  51. try {
  52. br.close();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57.  
  58. if(null!=socket){
  59. try {
  60. socket.close();
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. }
  66. }
  67.  
  68. }

  

  1. 二、【Socket 客户端】
  1. package www.rockcode.com.tnetty.client;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.PrintWriter;
  7. import java.net.InetSocketAddress;
  8. import java.net.Socket;
  9.  
  10. /**
  11. * @author xums
  12. * SocketClient
  13. * TODO
  14. * 2017年5月4日-上午10:47:20
  15. */
  16. public class SocketClient {
  17.  
  18. public static void main(String[] args) {
  19.  
  20. SocketClient client = new SocketClient();
  21. client.init();
  22.  
  23. }
  24.  
  25. public void init(){
  26. Socket socket = null;
  27. BufferedReader br = null;
  28. PrintWriter pw = null;
  29. try {
  30. socket = new Socket();
  31. socket.connect(new InetSocketAddress(9999), 5000);
  32. socket.setKeepAlive(true);//默认false
  33.  
  34. if(socket.isConnected()){
  35.  
  36. br = new BufferedReader(new InputStreamReader(System.in));
  37. pw = new PrintWriter(socket.getOutputStream(),true);//如果第二个参数不选择 true 或者 只选一个参数,那么发完消息要记得 flush()
  38. String msg = "";
  39.  
  40. while(true){
  41.  
  42. boolean alive = socket.getKeepAlive();//判断服务端是否在线
  43.  
  44. if(!alive){
  45. throw new Exception("服务端不在线!");
  46. }else{
  47. msg = br.readLine();
  48. if(null!=msg){
  49. System.out.println("发送消息:"+msg);
  50. pw.println(msg);
  51. //pw.flush();
  52. }
  53. }
  54. }
  55.  
  56. }
  57.  
  58. } catch (Exception e) {
  59. System.out.println(e.getMessage());
  60. }finally{
  61. if(null!=pw){
  62. pw.close();
  63. }
  64.  
  65. if(null!=br){
  66. try {
  67. br.close();
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72.  
  73. if(null!=socket){
  74. try {
  75. socket.close();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80.  
  81. }
  82. }
  83.  
  84. }
  1.  

Socket 编程是必须熟悉的知识点,即使现在有不少的开源通信框架出现,例如 Mina、Netty、Cindy 等等。现在商业上用的最多还是 Netty,从最原始的 Java IO 到 Java NIO,再到 Java AIO,再到 Netty 等。其底层离不开 Socket ,所有技术的更新和不断发展都是背后业务在驱动。人们追求高效率,高速度,高质量的通信,促使开源框架日新月异。关于开源通信框架以后再讲,和大家一起学习,谢谢大家观看!

  1.  

聊聊、Java 网络编程的更多相关文章

  1. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

  2. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  3. 20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...

  4. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  5. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  6. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  7. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

  8. JAVA课程实验报告 实验五 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  9. 20145225《Java程序设计》 实验五 Java网络编程及安全

    20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...

随机推荐

  1. 如何快速构建CMBD系统-glpi

    一.CMBD系统构建步骤 起初,开发这套CMBD系统是为了帮助朋友公司简化设备统计操作,以代替人工入库方式.举个例子,单位发放笔记本,或者设备更换了硬盘,都需要人工签到,手动输入统计,安装了CMBD系 ...

  2. android 代码将数据库文件导出到sd卡

    public static void save() { String dbpath = "/data/data/tl.cac.view/databases/" +"afi ...

  3. MFC制作简单通讯录程序

    学习c++和MFC一段时间了,苦于没有项目实战,所以自己写了一个简单的简单通讯录程序,以前用c#写简单很多,例程是这本书上的实例,我的第一个winform程序也是从这本书上学的,总结c#写的话更简单, ...

  4. SaaS 系统架构设计经验总结

    2B SaaS系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk SaaS系统.很多SaaS创业公司也拿了大额风投.毕竟SaaS相对传统软件的优势非常明显. ...

  5. Python3+Selenium3+webdriver学习笔记7(选择多链接的结果、iframe、下拉框)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriverfrom selenium.webdriver.co ...

  6. npm在linux即mac下更新时报错

    nam在linux即mac下需要更新到新版本:

  7. HDU 5097 Page Rank (模拟)

    题目背景是以前用来对网页进行排名的Page Rank算法,是早期Google的革命性发明. 背后的原理是矩阵和图论.这个数学模型是由Google的创始人拉里·佩奇和谢尔盖·布林发现的. 如果一个网页被 ...

  8. 【转】iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...

  9. pip和apt-get换源

    pip换源 一下方法对pip和pip3同时起作用 永久换源 运行一下命令: cd ~/.pip 如果提示目录不存在的话,我们要自行创建一个,再进入目录 mkdir ~/.pip cd ~/.pip 在 ...

  10. groff - groff 文档排版系统前端

    总览 (SYNOPSIS) groff [ -abehilpstvzCENRSUVXZ ] [ -wname ] [ -Wname ] [ -mname ] [ -Fdir ] [ -Idir ] [ ...