第一次接触Socket课程设计大二,我在做一个图书馆管理系统。源代码是从互联网上下载,代码天天磨,隐约中记得有Socket这么一个单词。

第二次是去年代表学校參加“河北省电子信息职业技能大赛”,接受曹建新师哥的培训。建新师哥当时用手机Android软件做client。通过局域网向电脑端server传输手机录入的信息。当时我非常诧异,client是Android平台,server是.Net平台,这两种平台是怎样在局域网内进行通信的呢?建新师哥的回答是:“通过Socket。把数据打包成JSON格式进行传输。”从此对Socket的认识便有了一种高大上的感觉。

第三次接触是通过马士兵老师的视频,这次瞬间感觉Socket--So Easy。这也验证了米老师的那句话:不怕不知道,就怕不知道。

Socket通信分为serverSocket即ServerSocket和clientSocket。

在server端,通信前须要建立和client的通信通道,建立对client通信port号的监听;在client,通信前须要定义进行通信的主机IP和port号,创建通信通道。两者都准备完成,以下就能够进行通信了。

server端代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TCPServer {public static void main(String[] args) {//创建向client数据传输的通道InputStream in = null;//创建从client接收数据的通道OutputStream out = null;try {//建立和client的通信,并定义通信端口ServerSocket ss = new ServerSocket(5888);//监听client提交的请求Socket socket = ss.accept();in = socket.getInputStream();out = socket.getOutputStream();//在字节流的基础上进行包装数据流DataInputStream dis = new DataInputStream(in);DataOutputStream dos = new DataOutputStream(out);//接收client提交的请求String s = null;if ((s = dis.readUTF()) != null) {System.out.println(s);System.out.println("from:" + socket.getInetAddress());System.out.println("port:" + socket.getPort());}//向client数据传输dos.writeUTF("hi,hello");dos.close();dis.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

因为数据流的readUTF()方法和writeUTF()方法都是堵塞式,所以当A向B发送数据后。假设B没有响应。A是无法继续发送数据的,仅仅能傻傻的等待。这个过程好比TCP/IP协议的三次握手,1:A呼叫B,“我是A。收到请回答?”;2:B回应A,“我是B,收到”;3:A继续说。“我想请你吃饭,你有时间吗?”。以下A和B就能够进行通信了。

server端代码有了,以下分享client代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class TCPClient {public static void main(String[] args) {//创建向server数据传输的通道InputStream in = null;//创建从server接收数据的通道OutputStream out = null;try {//定义进行通信的主机IP和端口号Socket socket = new Socket("localhost", 5888);in = socket.getInputStream();out = socket.getOutputStream();//在字节流的基础上进行包装数据流DataInputStream dis = new DataInputStream(in);DataOutputStream dos = new DataOutputStream(out);//向server提交数据dos.writeUTF("hey");//接收从server返回的数据String s = null;if ((s = dis.readUTF()) != null) {System.out.println(s);}dos.close();dis.close();socket.close();} catch (UnknownHostException e) {e.printStackTrace();}catch(IOException e){e.printStackTrace();}}
}

通过这个简单的小Demo,我们就能够清晰的观察到Socket是怎样在server端和client进行通信的。

J2SE是JavaWeb和J2EE的基础,异常处理、IO通道、线程、网络编程、GUI编程又是J2SE的基础,所以学好Socket非常有必要。

席慕蓉说过一句名言:前世的五百次回眸才干换得今生的一次擦肩而过。所以对于以后的每次擦肩而过都应该认真对待。不要像我。和Socket都擦肩而过好多次了,今天才最终认识它。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

j2se--Socket沟通相关推荐

  1. python django部署docker_Docker 部署 Django+Uwsgi+Nginx+Vue

    简介 * 1.两年前接触docker是因为要部署selenium_gird,后来呢发现zalenium可以录制ui自动化视频的工具,都是直接pull镜像,启动容器.所以一直以来就只用到了pull. r ...

  2. Java 实现联机Ateroids飞船陨石小游戏(多线程,网络)

    计量经济本科在读,断断续续学编程一段时间了,还是个编程小白,一直没有什么连续的输出,不能完全解决问题,很有挫败感.立个flag,希望写出来的东西通熟易懂,每天进步一点点.如有错误,请多多指正. 开始之 ...

  3. django制作一个小小的教务系统并且成功部署到腾讯云(实现:增删改查和选课的功能)

    我的django学习记录 涉及到的环境 前言 正文 开始了,django项目的创建 model代码 views代码 最新更新(上方可不看) 以Ubuntu为例 Step 1: 移除之前docker版本 ...

  4. linux常用c函数(中文版)

    都是linux的c函数东西略多,用页面搜索来查找吧. << Back to man.ChinaUnix.net isalnum(测试字符是否为英文或数字) 相关函数 isalpha,isd ...

  5. 百度前200页部分答案(初稿)

    1操作系统中 heap 和 stack 的区别 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.Java自动管理栈和堆,程序员不能直接地设置栈或堆. 在函数中定义的一些基本类 ...

  6. 一起学 Java(四) File、Try 、序列化、MySQL、Socket

    一.Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基 ...

  7. Tomcat:Connection reset by peer: socket write error

    Connection reset by peer: socket write error错误分析及解决 Connection reset by peer: socket write error错误分析 ...

  8. 【Socket】Python UDP和TCP的socket实例

    Socket UDP socket UDP Server端 UDP Client端 TCP socket TCP Server端 TCP Client端 总结 代码下载 Socket Socket又称 ...

  9. Linux的IPC机制(二):Socket/管道/消息队伍/信号量

    每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核. Linux 内核提供了不少进程间通信的机制,我们来一起瞧瞧有哪些? 管道 如 ...

  10. Socket 基础解析使用ServerSocket建立聊天服务器

     1.socket 简介 Socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.ServerSocket 用于服务器端,S ...

最新文章

  1. Firefox显示 您的链接不安全 的解决办法
  2. 20155338 《网络攻防》 Exp7 网络欺诈防范
  3. 【小白学PyTorch】8.实战之MNIST小试牛刀
  4. qa 芯片测试_芯片测试术语介绍CP、FT、WAT
  5. PAT1006 换个格式输出整数
  6. 【渝粤教育】国家开放大学2018年秋季 2508T学前儿童语言教育 参考试题
  7. 破解mysql数据库的密码
  8. Linux 学会看日志文件处理问题
  9. Mysql查询数据(单表查询)
  10. Js获取当前系统时间,24小时制
  11. Jackrabbit介绍
  12. 解决iTnues对PC授权,连接不上iTnues的问题
  13. 【优化覆盖】基于matlab改进的鲸鱼算法求解无线传感器WSN覆盖优化问题【含Matlab源码 XYQMDXP001期】
  14. VSCode如何运行Html页面
  15. 解决刷新页面Vuex数据丢失问题
  16. Hackintosh连接收藏
  17. 地址解析协议(Address Resolution Protocol)
  18. mysql usleep_date、sleep和usleep命令
  19. 图像处理之预处理方法
  20. LDPC码动态调度算法

热门文章

  1. Ubuntu MySQL 重新安装
  2. java怎样实现数据库 选择列属性的select查询??_除了不要 SELECT * ,使用数据库还应知道的11个技巧!...
  3. python 通配符域名_LeetCode-python 44.通配符匹配
  4. 20210530:力扣第53场双周赛题解
  5. 20200327:最大矩形(leetcode85)
  6. 2019-0405视觉SLAM的学习第三讲02
  7. linux可以修改日期格式吗,如何在Linux中使用date命令修改日期时间
  8. Quartz的简单使用
  9. 机房收费系统个人重构版:透过文档谈文档驱动开发
  10. 想让照片里的美女“回头”?清华MIT谷歌用AI帮你实现了