Java的Socket编程实例
socket简介
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。
代码解释
Socket编程可以使用 TCP协议,也可以使用UDP协议,我这里使用的是TCP协议的代码,运行的时候先运行服务器端,再运行客户端。
服务端
package org.somken.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;/*** 服务器端*author 周谦
*/public class SocketSServer { public static void main(String[] args) throws IOException { System.out.println("服务器开始运行...\n"); //创建侦听传入连接的服务器套接字//端口10000上的请求。 ServerSocket server = new ServerSocket(10000); while (true) { //侦听来自客户端的传入连接请求//programs,建立连接,返回socket//表示此连接的对象。Socket s = server.accept(); System.out.println("接受连接中...\n"); //启动一个线程来处理连接。 new ServerThread(s).start(); } } } class ServerThread extends Thread { private Socket s; ServerThread(Socket s) { this.s = s; } public void run() { BufferedReader br = null; PrintWriter pw = null; try { //创建一个链接到套接字的输入流读取器//面向字节的输入流。输入流读取器//将从套接字读取的字节转换为字符。这个//转换基于平台的默认字符//设置。InputStreamReader isr; isr = new InputStreamReader(s.getInputStream()); //创建一个链接到输入流的缓冲读取器 br = new BufferedReader(isr); /*创建一个链接到套接字面向字节的输出流的打印写入程序。打印作者创建将发送到套接字的字符转换为字节的中间输出流编写器。转换基于平台的默认字符集。 */pw = new PrintWriter(s.getOutputStream(), true); //创建可以获取日期和时间信息的日历。 Calendar c = Calendar.getInstance(); do { //获取客户端程序的下一个命令。 String cmd = br.readLine(); // 如果客户端程序已关闭其输出流,则退出。 if (cmd == null) break; //将命令转换为大写,以便于比较。cmd = cmd.toUpperCase(); // 如果客户端程序发送bye命令,则终止。 if (cmd.startsWith("BYE")) break; // 如果客户端程序发送日期或时间命令,则将当前日期/时间返回给客户端程序。if (cmd.startsWith("DATE") || cmd.startsWith("TIME")) pw.println(c.getTime().toString()); //如果客户端程序发送dom(月日)命令,则将当前月日返回给客户端程序。 if (cmd.startsWith("DOM")) pw.println("" + c.get(Calendar.DAY_OF_MONTH)); // 如果客户端程序发送dow(星期几)命令,//则将当前工作日(作为字符串)返回给客户端程序。if (cmd.startsWith("DOW")) switch (c.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: pw.println("SUNDAY"); break; case Calendar.MONDAY: pw.println("MONDAY"); break; case Calendar.TUESDAY: pw.println("TUESDAY"); break; case Calendar.WEDNESDAY: pw.println("WEDNESDAY"); break; case Calendar.THURSDAY: pw.println("THURSDAY"); break; case Calendar.FRIDAY: pw.println("FRIDAY"); break; case Calendar.SATURDAY: pw.println("SATURDAY"); } // 如果客户端程序发送doy(一年中的某一天)命令,则将当前的一年中的某一天返回给客户端程序 if (cmd.startsWith("DOY")) pw.println("" + c.get(Calendar.DAY_OF_YEAR)); // 如果客户端程序发送暂停命令,则睡眠3秒钟。if (cmd.startsWith("PAUSE")) try { Thread.sleep(3000); } catch (InterruptedException e) { } } while (true); } catch (IOException e) { System.out.println(e.toString()); } finally { System.out.println("关闭连接...\n"); try { if (br != null) br.close(); if (pw != null) pw.close(); if (s != null) s.close(); } catch (IOException e) { } } } }
客户端代码
package org.somken.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;/**author 周谦
*/public class SocketSClient { public static void main(String[] args) { String host = "localhost"; // 如果用户指定命令行参数,则该参数表示主机名。 if (args.length == 1) host = args[0]; BufferedReader br = null; PrintWriter pw = null; Socket s = null; try { //创建一个套接字,尝试连接到位于端口10000的主机上的服务器程序。 s = new Socket(host, 10000); InputStreamReader isr; isr = new InputStreamReader(s.getInputStream()); br = new BufferedReader(isr); pw = new PrintWriter(s.getOutputStream(), true); // 向服务器发送日期命令。pw.println("DATE"); // 获取并打印当前日期/时间。System.out.println(br.readLine()); // 向服务器发送暂停命令。这允许多个客户端启动并验证服务器是否正在生成多个线程。pw.println("PAUSE"); // 向服务器发送dow命令。pw.println("DOW"); // 获取并打印当前星期几。System.out.println(br.readLine()); // 将dom命令发送到服务器。pw.println("DOM"); // 获取并打印当前月份的日期。System.out.println(br.readLine()); // 将doy命令发送到服务器。pw.println("DOY"); // 获取并打印当前日期。System.out.println(br.readLine()); } catch (IOException e) { System.out.println(e.toString()); } finally { try { if (br != null) br.close(); if (pw != null) pw.close(); if (s != null) s.close(); } catch (IOException e) { } } } }
代码就到这里了。
Java的Socket编程实例相关推荐
- java中socket编程实例_Java中socket编程的实现过程(代码实例)
本篇文章给大家带来的内容是关于socket编程的实现过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.socket 服务器搭建 实例化socket服务器,循环获取请求packa ...
- Java NIO Socket编程实例
各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用 ...
- Socket编程实例
2019独角兽企业重金招聘Python工程师标准>>> Java具有非常强大的网络应用开发能力.学习网络编程,估计都是从编写一个socket通信开始,从中慢慢掌握网络编程的一点点知识 ...
- JAVA之Socket编程(技术总结)
1.socket编程实例1--Socket客户端(字符串)->请求到Socket服务端->响应客户端: 代码如下: import java.io.BufferedReader; impor ...
- api有哪些 javasocket_基于java的socket编程及API解析
一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台 ...
- C语言 socket编程实例
C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...
- android c++ socket编程,C++ 中 socket编程实例详解
C++ 中 socket编程实例详解 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的soc ...
- JAVA socket编程实例 转载
事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了.Java SDK提供一些相对简单的Api来完成这些工作.Socket ...
- JAVA socket编程实例
2019独角兽企业重金招聘Python工程师标准>>> 事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的 ...
- tcp java实例_实现了基于TCP的Java Socket编程实例代码
实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...
最新文章
- Cassandra 的数据存储结构——本质是SortedMapRowKey, SortedMapColumnKey, ColumnValue
- redis 4.0.8 源码包安装集群
- 用vector写结构体
- 【深度学习】谷歌工程师万字好文:我们为何追求高性能深度学习?如何实现?...
- 【代码规范】常见排版规范
- OpenStack的部署T版(五)——Nova组件
- golang 代理地址
- RobotFramework中查询数据库相关
- php字符串操作整理,《PHP字符串操作》收集整理
- 手把手教你做做一份高质量投标书
- python用pandas读取txt_python Pandas 读取txt表格的实例
- 有没有什么免费的网页视频录制软件?PC端视频录制软件集合
- 国内50个热点行业产业链全景图
- sql中的 between and 用法
- 第四周项目2--建立”单链表“算法库
- 将vscode打造成无敌的IDE(7)添加自定义C/C++的snippet
- TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)
- JAVAscript中的this指向和this指向的修改
- 拉格朗日插值法与牛顿插值多项式
- 找出阿里云服务器无法访问淘宝司拍页面原因
热门文章
- 数据库和SQL基本知识点
- java测试类调用方法_java – 在单元测试中调用其他类方法
- 转自瑞星:“永恒之蓝”WannaCry勒索病毒分析报告
- python知识图谱关系抽取算法_知识图谱关系抽取之PCNN——tensorflow实现
- PICT-测试用例生成工具
- 出生就遇浏览器大战,亲爹还不爱,命运坎坷的JavaScript终于苦尽甘来
- 0910下eclipse 语言包的插件安装
- 【保姆级教学】Landsat遥感影像下载
- 智能门锁主要有哪些优势,具体是怎么分类的?
- 【数字图像处理5.3】SLIC算法 超像素分割(无监督聚类方式)python