每日一学之socket编程(一)

图片来自于网络

什么是socket编程

网络上的两个程序,通过一个双向通信的链路,将两个程序连接起来,那么每一段都是一个socket。因此socket常被称为“套接字”。

对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。千万不要被Java中的SocketServerSocket迷糊了眼睛。

网络的分层

对于Java而言,Java的网络类始终只工作在TCP/IP网络中,始终运行在应用层和传输层上,因此,我们只需要了解适用于Internet的标准TCP/IP四层模型。

Java中Socket

Java使用客户端的socket:

1、通过构造函数创建新的socket

2、尝试连接远程主机

3、一旦建立连接之后就从socket取得输出流和输入流,使用这两个流收发数据

4、当数据传输完成之后,一端或者两端将关闭连接

Java使用服务端的socket:

1、通过构造函数创建新的ServerSocket

2、将serverSocket绑定在固定端口

3、阻塞的方式等待客户端来连接,由于服务端是不会关闭的,因此我们要使用点小手段保证服务端一直等待客户端来连接。连接上来后,就跟客户端处理一样了。

有一个小知识点:当你关闭流后,socket其实已经关闭;按照JavaAPI所说,这是一个双工通路。

上面的程序有两个个致命的缺陷,不知道大家能否看出来。那就是同时只能处理一个客户端的连接以及数据只能接收12个字节的长度。

本文来自企鹅号 - 人人会编程媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维小白

10.21 firewalld关于zone的操作

Linux防火墙-firewalld firewall-cmd --set-default-zone=work //设定默认zone firewall-cmd ...

220100
来自专栏Laoqi's Linux运维专列

chmod,chown,umask,lsattr,chattr

chmod rwxrw-r– 代表着不同的三个权限位 分别是:所有者,所属组,其他用户 r=4 w=2 x=1 , rwx=7,rw- =6, r– =4, r...

494100
来自专栏别先生

EasyUI之Hello world(EasyUI的入门学习)

1:创建一个动态web工程:     去官网http://www.jeasyui.net/download/下载官网文档     我去官网下载的最新版本,个人根...

244100
来自专栏惨绿少年

练习题二上

第1章 linux启动过程 1、开机自检bios 2、mbr引导 3、GRUB 菜单:选择不同的内核 4、加载内核 5、运行init进程 6、读取/etc/in...

26000
来自专栏惨绿少年

linux中必会的目录

第1章 find命令扩展 1.1 方法一 |xargs 通过|xargs将前面命令的执行结果传给后面。 [root@znix ~]# find /oldboy/...

30100
来自专栏从零学习云计算

kubernetes工作记录(2)——基于release工程的kubernetes1.7.3 rpm包的编译生成

使用release工程编译的方式,生成kubernetes1.7.3的rpm包。 虚拟机环境为Centos7.2。 安装git # yum -y install...

24800
来自专栏软件测试经验与教训

session与cookie的区别详解

由于HTTP协议是无状态的,在WEB系统中,怎么识别请求来自于哪里呢?是哪一个用户发起的请求呢?

12510
来自专栏实战docker

Docker下,极速体验编译pinpoint1.6.x分支

pinpoint是一款优秀的APM监控工具(Application Performance Management),用java编写的,用于分布式系统的监控和调用...

355100
来自专栏企鹅号快讯

React 学习笔记

React 学习笔记 Wednesday, 03. January 2018 04:45PM react 基于nodejs环境。 ? 一、环境安装 nodejs...

20970
来自专栏白驹过隙

Redis - 介绍及安装

29490

扫码关注云+社区

领取腾讯云代金券