java socket通信
socket通信是指两台计算机的两个程序之间的通信,双向链路的每一端都称为一个socket,但分为客户机和服务器。
java.net提供了ServerSocket和Socket类,分别用于服务器和客户端。
通信过程:
建立Socket连接,客户端程序申请连接,服务器端程序监听所有端口,判断是否有客户端的服务器请求,当客户端申请某个端口连接时,服务器将对方的ip和端口号绑定形成套接字,这样服务器和客户机就建立了一个专用虚拟连接,可以相互通信了,通信结束后将虚拟连接拆除。
编程步骤:服务器先建立一个服务器套接字ServerSocket,并指定端口号监听客户机请求,然后建立一个Socket用来和客户机通信,客户机建立端建立同一端口的Socket以便和服务器通信。
java.net包含以上两个类:
主要方法说明:
ServerSocket(int port)在指定端口上创建服务器Socket对象
ServerSocket(int port,int count)count 为最大连接数
Sorket(InetAddress IP,int port)使用指定IP和端口建立Socket对象
Sorket(String host,int port)使用指定主机和端口建立Socket对象
以上两个方法有对三个选项 boolean stream(布尔值表示是否选用流式通信)
可以用Socket类的 getInputstream 和getOutstream来读写数据的输入输出流。但要进行异常处理,读取输入输出流后要建立更容易操作的InputStreamReader和Out..... 通信结束后close(Socket)断开连接。
Socket应用:
服务器:
package Socket;
import java.io.*;
import java.net.*;
public class Serverclass{
public static final int SERVERPORT = 9999; //服务器端口号
public static void main(String[] args ){
try{
ServerSocket s = new ServerSocket(SERVERPORT);
System.out.println("开始:" + s); //建立服务器端监听套接字
Socket incoming = s.accept( );//等待并接收请求,建立连接套接字
System.out.println("连接并接收到:" + incoming);//收到连接请求,incoming为套接字端口
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
//新建网络连接输入流,读取incoming端口传来的信息,为一个对象,传入数据的格式,通过in.readline()翻译
PrintWriter out = new PrintWriter( new BufferedWriter(new OutputStreamWriter(incoming.getOutputStream())), true);
//新建自动刷新的网络输出流,作用:通过out.println()向客户端输出信息。
System.out.println( "输入quit退出" );
while (true){
String line = in.readLine(); //按行读取socket输入
if (line == null) break;
else{
if (line.trim().equals("quit")){
System.out.println("客户端输入了quit!");
System.out.println("连接已经关闭!");
break; }
System.out.println("客户端输入的是:" + line);
out.println("您输入的是:" + line);}}
incoming.close();}
catch (IOException e){ //异常处理
System.err.println("输入输出异常"+e.getMessage());}
}
}
客户端:
package S;
import java.io.*;
import java.net.*;
public class server {
public static final int PORT=9999;
public static void main(String args[]){
try{
Socket s=new Socket("localhost",PORT);//建立连接套接字
System.out.println("socket"+s);//输出端口信息
//新建网络连接输入流
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
//自动刷新的网络连接输出流
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(
s.getOutputStream())),true);
//构造stdin
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入一个字符串,quit退出");
while(true){
//先对如系统输入,在通过套接字输出,out为PrintWriter对象
out.println(stdin.readLine());//out的参数为BufferedWriter类,stdin。readline()
String str=in.readLine();
if(str==null)
break;
System.out.println(str);
}
s.close();
}
catch(IOException e){
System.err.println("错误:"+e.getMessage() );
}
}
}
转载于:https://www.cnblogs.com/hitxx/p/4849592.html
java socket通信相关推荐
- flex java socket通信
引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...
- Java Socket通信实现多人多端网络画板聊天室
老规矩,先上实现的效果展示! Java Socket通信实现多人多端网络画板聊天室 本文介绍了一个基于Socket实现网络画板聊天室的完整过程,聊天室具备多人文本对话.同步绘图等功能. 初尝试 Soc ...
- Java Socket通信之TCP协议
文章目录 一. Java流套接字通信模型 1.TCP模型 2.TCP Socket常见API ServerSocket API Socket API 二.TCP流套接字编程 1.回显服务器 2.多线程 ...
- java Socket通信(一)
ava socket通信已经被封装好了主要使用两个类ServerSocket 和Socket 首先写一个1v1的通信 服务端 /** * */ package com.dnion.socket; im ...
- Java Socket 通信实例 - 转载
基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络 ...
- java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信
Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...
- c与java socket通信
通常情况下是java调用so库,调用协议好的方法传参,然后获取返回值 现要求java文件与c文件进行socket通信,可互为服务端和客户端,具体示例如下: GitHub - zpbshine/Sock ...
- java socket通信的简要举例
Java的原生Socket(java.net.Socket)通信的举例: 首先是创建Socket的服务端:其次创建Socket的客户端. 通信过程如下: 客户端(C)向服务端(S)发送任意数据,服务端 ...
- Java——Socket通信原理
* Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都 ...
最新文章
- 小学毕业能学php吗,将来没出息的娃,多半从小就有这些缺点,小学毕业前还不改就晚了...
- VS2005发布网站问题及aspnet_merge.exe”已退出,代码为 1的错误
- 物联网智慧城市为降低城市能源消耗做出贡献
- 《Java技术》第一次作业
- 科技前沿及论文写作相关视频
- mongodb 分组聚合_mongodb 聚合命令
- Likecloud-吃、吃、吃(洛谷-P1508)
- XSLT实现XML无极限树(精简版)[二] 解决没有递归出节点属性值总和的问题(JS实现)...
- win7局域网里输入正确密码也访问不了其他的机器
- Angular进阶教程一
- DevExpress 小结
- Machine Learning Concepts
- html打开ppt自动播放,PPT怎么自动播放
- PDF怎么快速统计文档字数?这两种方法很简单
- @vue/composition-api/dist/vue-composition-api.mjs in ./node_modules/vue-demi/lib/index.mjs 报错
- ansible 远程启动程序ansible结束后程序也被关闭
- RAR文件解压缩时系统提示“CRC校验失败,文件被破坏”,修复损坏文件的办法!
- 出第三方软件检测报告的测试机构有哪些,具备CMA、CNAS资质的测评公司推荐
- 香港汇丰银行开户需要提供什么资料
- Windows10安装Centos7双系统
热门文章
- 汇编指令中的字母会区分大小写吗?(除了字符型数据,其他地方都不区分)
- Linux虚拟内存与线性地址翻译
- ASCII 编码对照表
- DialogFragment源码分析
- 6月5日,IBM“云有‘智’,事竟成”大会邀您莅临!
- elk,logstash -elastcisearch 429
- docker学习笔记(四)——Dockerfile创建自定义镜像
- 利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用
- 技术社区,你真的会混吗?
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(三)