j2se--Socket沟通
第一次接触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沟通相关推荐
- python django部署docker_Docker 部署 Django+Uwsgi+Nginx+Vue
简介 * 1.两年前接触docker是因为要部署selenium_gird,后来呢发现zalenium可以录制ui自动化视频的工具,都是直接pull镜像,启动容器.所以一直以来就只用到了pull. r ...
- Java 实现联机Ateroids飞船陨石小游戏(多线程,网络)
计量经济本科在读,断断续续学编程一段时间了,还是个编程小白,一直没有什么连续的输出,不能完全解决问题,很有挫败感.立个flag,希望写出来的东西通熟易懂,每天进步一点点.如有错误,请多多指正. 开始之 ...
- django制作一个小小的教务系统并且成功部署到腾讯云(实现:增删改查和选课的功能)
我的django学习记录 涉及到的环境 前言 正文 开始了,django项目的创建 model代码 views代码 最新更新(上方可不看) 以Ubuntu为例 Step 1: 移除之前docker版本 ...
- linux常用c函数(中文版)
都是linux的c函数东西略多,用页面搜索来查找吧. << Back to man.ChinaUnix.net isalnum(测试字符是否为英文或数字) 相关函数 isalpha,isd ...
- 百度前200页部分答案(初稿)
1操作系统中 heap 和 stack 的区别 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.Java自动管理栈和堆,程序员不能直接地设置栈或堆. 在函数中定义的一些基本类 ...
- 一起学 Java(四) File、Try 、序列化、MySQL、Socket
一.Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基 ...
- Tomcat:Connection reset by peer: socket write error
Connection reset by peer: socket write error错误分析及解决 Connection reset by peer: socket write error错误分析 ...
- 【Socket】Python UDP和TCP的socket实例
Socket UDP socket UDP Server端 UDP Client端 TCP socket TCP Server端 TCP Client端 总结 代码下载 Socket Socket又称 ...
- Linux的IPC机制(二):Socket/管道/消息队伍/信号量
每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核. Linux 内核提供了不少进程间通信的机制,我们来一起瞧瞧有哪些? 管道 如 ...
- Socket 基础解析使用ServerSocket建立聊天服务器
1.socket 简介 Socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.ServerSocket 用于服务器端,S ...
最新文章
- Firefox显示 您的链接不安全 的解决办法
- 20155338 《网络攻防》 Exp7 网络欺诈防范
- 【小白学PyTorch】8.实战之MNIST小试牛刀
- qa 芯片测试_芯片测试术语介绍CP、FT、WAT
- PAT1006 换个格式输出整数
- 【渝粤教育】国家开放大学2018年秋季 2508T学前儿童语言教育 参考试题
- 破解mysql数据库的密码
- Linux 学会看日志文件处理问题
- Mysql查询数据(单表查询)
- Js获取当前系统时间,24小时制
- Jackrabbit介绍
- 解决iTnues对PC授权,连接不上iTnues的问题
- 【优化覆盖】基于matlab改进的鲸鱼算法求解无线传感器WSN覆盖优化问题【含Matlab源码 XYQMDXP001期】
- VSCode如何运行Html页面
- 解决刷新页面Vuex数据丢失问题
- Hackintosh连接收藏
- 地址解析协议(Address Resolution Protocol)
- mysql usleep_date、sleep和usleep命令
- 图像处理之预处理方法
- LDPC码动态调度算法
热门文章
- Ubuntu MySQL 重新安装
- java怎样实现数据库 选择列属性的select查询??_除了不要 SELECT * ,使用数据库还应知道的11个技巧!...
- python 通配符域名_LeetCode-python 44.通配符匹配
- 20210530:力扣第53场双周赛题解
- 20200327:最大矩形(leetcode85)
- 2019-0405视觉SLAM的学习第三讲02
- linux可以修改日期格式吗,如何在Linux中使用date命令修改日期时间
- Quartz的简单使用
- 机房收费系统个人重构版:透过文档谈文档驱动开发
- 想让照片里的美女“回头”?清华MIT谷歌用AI帮你实现了