关键词:
1. Socket 通信简介及模型
Java Socket 可实现客户端--服务器间的双向实时通信。java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端。
2. Socket 通信实现方法
2.1 服务器端(非多线程)
- 用指定的端口实例化一个SeverSocket对象。服务器就可以用这个端口监听从客户端发来的连接请求。
- 调用ServerSocket的accept()方法,以在等待连接期间造成阻塞,监听连接从端口上发来的连接请求。
- 利用accept方法返回的客户端的Socket对象,进行读写IO的操作
- 关闭打开的流和Socket对象
/** * 基于TCP协议的Socket通信,实现用户登录,服务端 */ //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket =newServerSocket(10086);//1024-65535的某个端口 //2、调用accept()方法开始监听,等待客户端的连接 Socket socket = serverSocket.accept(); //3、获取输入流,并读取客户端信息 InputStream is = socket.getInputStream(); InputStreamReader isr =newInputStreamReader(is); BufferedReader br =newBufferedReader(isr); String info =null; while((info=br.readLine())!=null){ System.out.println("Hello,我是服务器,客户端说:"+info); } socket.shutdownInput();//关闭输入流 //4、获取输出流,响应客户端的请求 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write("Hello World!"); pw.flush(); //5、关闭资源 pw.close(); os.close(); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close();
2.2 客户端
- 用服务器的IP地址和端口号实例化Socket对象。
- 调用connect方法,连接到服务器上。
- 获得Socket上的流,把流封装进BufferedReader/PrintWriter的实例,以进行读写
- 利用Socket提供的getInputStream和getOutputStream方法,通过IO流对象,向服务器发送数据流
- 关闭打开的流和Socket。
//客户端 //1、创建客户端Socket,指定服务器地址和端口 Socket socket =newSocket("127.0.0.1",10086); //2、获取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 PrintWriter pw =newPrintWriter(os);//将输出流包装成打印流 pw.write("用户名:admin;密码:admin"); pw.flush(); socket.shutdownOutput(); //3、获取输入流,并读取服务器端的响应信息 InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while((info=br.readLine())!null){ System.out.println("Hello,我是客户端,服务器说:"+info); } //4、关闭资源 br.close(); is.close(); pw.close(); os.close(); socket.close();
2.2 服务器端 (多线程)
- 服务器端创建ServerSocket,循环调用accept()等待客户端连接
- 客户端创建一个socket并请求和服务器端连接
- 服务器端接受客户端请求,创建socket与该客户建立专线连接
- 建立连接的两个socket在一个单独的线程上对话
- 服务器端继续等待新的连接
//服务器线程处理 和本线程相关的socket Socket socket =null; public serverThread(Socket socket){ this.socket = socket; } ServerSocket serverSocket =newServerSocket(10086); Socket socket =null; int count =0;//记录客户端的数量 while(true){ socket = serverScoket.accept(); ServerThread serverThread =newServerThread(socket); serverThread.start(); count++; System.out.println("客户端连接的数量:"+count); }
叁考资料:
http://developer.51cto.com/art/201509/490775.htm
http://blog.csdn.net/benweizhu/article/details/6615542/
http://www.blogjava.net/Reg/archive/2010/07/17/326392.html
javasocket编程api基础
Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助, 此文讲解Socket的基础编程。Socket用在哪里:①、主要用在进程间,②、网络间通信。文章目录如下:一、Socket通信基本示例二、消息通信优... 查看详情
redis高频面试笔记:javasocket服务端开发
在校生如果你是在校生,你应该趁着在学校的时间夯实基础(比如计算机系统、算法、编译原理等等)不要动不动去搞什么项目,你也搞不出一个让面试官很满意的项目出来,所以根本没必要在项目上面浪费... 查看详情
windows编程课程学习笔记
一.Windows程序内部运行机制--Windows编程课程学习笔记二.MFC框架程序分析--Windows编程课程学习笔记三.简单绘图--Windows编程课程学习笔记四.文本编程--Windows编程课程学习笔记五.菜单编程--Windows编程课程学习笔记六.对话框编程--Window... 查看详情
windows编程课程学习笔记
一.Windows程序内部运行机制--Windows编程课程学习笔记二.MFC框架程序分析--Windows编程课程学习笔记三.简单绘图--Windows编程课程学习笔记四.文本编程--Windows编程课程学习笔记五.菜单编程--Windows编程课程学习笔记六.对话框编程--Window... 查看详情
javasocket学习
socket服务端编写之BIO网络学习1packagecom.example.demo.bio;23importjava.io.IOException;4importjava.net.ServerSocket;5importjava.net.Socket;67/**8*@Author:Lambert9*@Date:2019-01-0700:3710*@Description:11*/12publi 查看详情
javasocket编程
申明:本文摘自:http://www.cnblogs.com/rocomp/p/4790340.htmlJava最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用... 查看详情
javasocket编程--聊天小案例
很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍。服务器端:packagecom.fancy;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;imp 查看详情
javasocket编程
一、网络编程概述网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不... 查看详情
javasocket编程简介
#JavaTCPIp编程 其实下面几张图片就可以解释简单解释tcp-ip协议的大体流程了。###计算机网络,分组报文和协议网络是一组通过通信信道相互连接的机器组成。组与组之间通过路由器连接数据通过分组报文传递协议,传输报文... 查看详情
多线程编程学习笔记——线程同步
接上文多线程编程学习笔记-基础(一)接上文多线程编程学习笔记-基础(二)接上文多线程编程学习笔记-基础(三) 就如上一篇文章(多线程编程学习笔记-基础(三))中的示例代码十,一样如果... 查看详情
javasocket编程(li)
一、网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定In... 查看详情
javasocket网络编程常见异常(转)
转:https://www.cnblogs.com/qq78292959/p/5085559.html 1.java.net.SocketTimeoutException 这个异常比较常见,socket超时。一般有2个地方会抛出这个: a.一个是connect的时候,这个超时参数由connect(SocketAddressendpoint,inttimeout)中的后者来... 查看详情
多线程编程学习笔记-基础
接上文多线程编程学习笔记-基础(一)接上文多线程编程学习笔记-基础(二)九、向线程传递参数 1.代码如下。 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;//引入线程usingSystem.Diagnostics;na... 查看详情
多线程编程学习笔记——线程池
接上文 多线程编程学习笔记——线程同步(一) 接上文多线程编程学习笔记——线程同步(二) 接上文多线程编程学习笔记——线程同步(三) 创建多线程操作... 查看详情
javasocket编程以及与linuxsocketapi关系
Socket编程(基于Linux)Socket独立于具体协议的网络编程接口,在ISO模型中,主要位于会话层和传输层之间;在通用的计算机网络五层模型中,主要位于应用层和传输层之间。LinuxSocket基本上就是BSDSocket需要使用的头文件数据类型:#in... 查看详情
javasocket编程----通信是这样炼成的
http://www.cnblogs.com/rocomp/p/4790340.htmlJava最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术... 查看详情
javasocket编程(代码片段)
Socket概念tcp协议全称是TransmissionControlProtocol,传输控制协议,是以字节流的方式发送数据的协议。ip全称为InternetProtocol互联网协议,tcp/ip协议在四层模型中的传输层。http、ftp、telnet(ssh)远程登录服务为应用层协议... 查看详情
javasocket实现udp编程
UDP简介UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC768是... 查看详情