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通信相关推荐

  1. flex java socket通信

    引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...

  2. Java Socket通信实现多人多端网络画板聊天室

    老规矩,先上实现的效果展示! Java Socket通信实现多人多端网络画板聊天室 本文介绍了一个基于Socket实现网络画板聊天室的完整过程,聊天室具备多人文本对话.同步绘图等功能. 初尝试 Soc ...

  3. Java Socket通信之TCP协议

    文章目录 一. Java流套接字通信模型 1.TCP模型 2.TCP Socket常见API ServerSocket API Socket API 二.TCP流套接字编程 1.回显服务器 2.多线程 ...

  4. java Socket通信(一)

    ava socket通信已经被封装好了主要使用两个类ServerSocket 和Socket 首先写一个1v1的通信 服务端 /** * */ package com.dnion.socket; im ...

  5. Java Socket 通信实例 - 转载

    基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络 ...

  6. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信

    Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...

  7. c与java socket通信

    通常情况下是java调用so库,调用协议好的方法传参,然后获取返回值 现要求java文件与c文件进行socket通信,可互为服务端和客户端,具体示例如下: GitHub - zpbshine/Sock ...

  8. java socket通信的简要举例

    Java的原生Socket(java.net.Socket)通信的举例: 首先是创建Socket的服务端:其次创建Socket的客户端. 通信过程如下: 客户端(C)向服务端(S)发送任意数据,服务端 ...

  9. Java——Socket通信原理

    * Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都 ...

最新文章

  1. 小学毕业能学php吗,将来没出息的娃,多半从小就有这些缺点,小学毕业前还不改就晚了...
  2. VS2005发布网站问题及aspnet_merge.exe”已退出,代码为 1的错误
  3. 物联网智慧城市为降低城市能源消耗做出贡献
  4. 《Java技术》第一次作业
  5. 科技前沿及论文写作相关视频
  6. mongodb 分组聚合_mongodb 聚合命令
  7. Likecloud-吃、吃、吃(洛谷-P1508)
  8. XSLT实现XML无极限树(精简版)[二] 解决没有递归出节点属性值总和的问题(JS实现)...
  9. win7局域网里输入正确密码也访问不了其他的机器
  10. Angular进阶教程一
  11. DevExpress 小结
  12. Machine Learning Concepts
  13. html打开ppt自动播放,PPT怎么自动播放
  14. PDF怎么快速统计文档字数?这两种方法很简单
  15. @vue/composition-api/dist/vue-composition-api.mjs in ./node_modules/vue-demi/lib/index.mjs 报错
  16. ansible 远程启动程序ansible结束后程序也被关闭
  17. RAR文件解压缩时系统提示“CRC校验失败,文件被破坏”,修复损坏文件的办法!
  18. 出第三方软件检测报告的测试机构有哪些,具备CMA、CNAS资质的测评公司推荐
  19. 香港汇丰银行开户需要提供什么资料
  20. Windows10安装Centos7双系统

热门文章

  1. 汇编指令中的字母会区分大小写吗?(除了字符型数据,其他地方都不区分)
  2. Linux虚拟内存与线性地址翻译
  3. ASCII 编码对照表
  4. DialogFragment源码分析
  5. 6月5日,IBM“云有‘智’,事竟成”大会邀您莅临!
  6. elk,logstash -elastcisearch 429
  7. docker学习笔记(四)——Dockerfile创建自定义镜像
  8. 利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用
  9. 技术社区,你真的会混吗?
  10. 由浅入深:自己动手开发模板引擎——置换型模板引擎(三)