Socket初步了解

在这之前我们先了解一下一些关于网络编程的概念

两类传输协议:TCP UDP
TCP就是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送
方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个
socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。
UDP就是Use Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的
路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
Socket网络编程可以分为以下步骤
1.建立连接
2.打开Socket关联的输出流
3.数据流读取信息
4.关闭所有数据流和Socket
Socket实现原理机制
1.通信两端都有Socket
2.网络通信其实就是Socket间的通信
3.数据在两个Socket间通过IO传输
Socket 通信模型
进行网络通信时,Socket需要借助数据流来完成数据流的传递工作

如何实现多客户请求呢

采用多线程方式
一个专门负责监听的应用服务程序
一个专门负责处理请求的线程程序
DatagramPacket类
封装了数据报的数据,数据长度,目标地址和目标端口
DatagramSocket类
接收和发送DatagramPacket对象封装好的数据报
基于UDP协议的Socket网络编程步骤
1.利用DatagramPacket对象封装数据报
2.利用DatagramSocket发送数据报
3.利用DatagramSocket接收数据报
4.利用DatagramPacket处理数据报
使用两种协议实现简单的对话功能(简单的对话功能)



ServerSocket sk=new ServerSocket(11111);
//2.监听
Socket s=sk.accept();
//打包数据
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
OutputStream os=s.getOutputStream();
String line=null;
while((line=br.readLine())!=null){
System.out.println("Client \t"+line); os.write(bw.readLine().getBytes());
}
//释放资源
s.close();
//sk.close();


Socket sk=new Socket("192.168.111.1",11111);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
String line=null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
InputStream is=sk.getInputStream();
byte [] by=new byte[1024];
int num=is.read(by);
String h=new String(by, 0, num);
System.out.println("Service:\t"+h);
}
//br.close();
//bw.close();
sk.close();
}

实现结果

==============================================

=======================================

========================================

Socket初步了解的更多相关文章
- ACE的Socket初步
Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接. 客户端通过服务器的ip和服务器绑定的端口连接服务器. 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互. 常用AP ...
- java socket初步学习一 ( tcp)
Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1 端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立 ...
- socket初步
简单demo:https://blog.csdn.net/ns_code/article/details/14105457
- 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md
前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...
- 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...
- 【2016-11-10】【坚持学习】【Day23】【Socket 编程初步了解】
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.
- 初步理解socket
近期研究下socket,发现自己还是有非常多不明确的地方,索性沉下心来,从最基础開始学习,開始看起,如今对自己的学习做下小小总结,以便和大家分享,如有谬误,敬请指正. 原创文章,转载请注明出处:htt ...
- 在web浏览器上显示室内温度(nodeJs+arduino+socket.io)
上次的nodejs操作arduino入门篇中实现了如何连接arduino.这次我们来实现通过arduino测量室内温度并在浏览器上显示出来. [所需材料] 硬件:LM35温度传感器,arduino u ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
随机推荐
- MySQL中的注释(有三种)
MysQL支持三种注释: .#... (推荐这种,具有通性) ."-- ..." (注意--后面有一个空格) ./*...*/
- SET NAMES 'charset_name'
设置写入db和db返回读出结果的字符集character set https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html SET ...
- json.dumps 和 json.dump的区别,load和loads的区别
json.dumps 和 json.dump的区别,load和loads的区别
- requests 中response如何改变编码格式
查看初始编码 首先查看拿到的response编码格式: (就不放代码了,因为此例需要用到cookie,可自行找个网站具体测试) 可见初始编码为:ISO-8859-1 修改编码 初始编码: 修改后编码: ...
- 【我的Android进阶之旅】如何隐藏Android中EditText控件的默认下划线
Android EditText控件是经常使用的控件,但是有时候我们并不需要它的一些默认的属性,比如说下划线,因为有时候这样的默认下划线看起来特别怪异,和其他控件在一起搭配的时候不协调,因此有时候就需 ...
- 0502-Hystrix保护应用-简介,使用,健康指标等
一.概述 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_circuit_ ...
- Android学习八---OpenCV JAVA API
OpenCV java API的文档说明在OpenCV-2.4.10-android-sdk/sdk/java/javadoc/index.html的文件夹下. 想用java API的方式进行Open ...
- 关于var关键字的详解
var 在很多语言中都比较常见,到底var是什么,如何应用,下面就笔者常用的javascript.c#对var进行说明: var 是 variable(变量,可变物)的简写.在多种计算机编程语言中,v ...
- 怎么找出解析失败的sql
本文由我和公司同事问心共同测试分析完成. 很多时候我们会有这样一个误区,语法错误或者对象不存在应该在语法语义检查这个步骤就结束了,怎么还会存在共享池里面呢?带着这个几个问题我们做几个简单的测试. 我们 ...
- 快速排序算法C语言版
快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比 ...