Socket网络编成是一种较为底层的网络数据传输,很多语言都支持。

本例是根据菜鸟教程中的Java网络编程而写。

详细内容参考请参考:http://www.runoob.com/java/java-networking.html

Socket 编程

套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。

java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。

以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

  • 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。

  • 服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。

  • 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。

  • Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。

  • 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。

连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。

TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.以下是一些类提供的一套完整的有用的方法来实现 socket。

客户端代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class Client {public static void main(String[] args) {
String serverName = args[0];
int port = Integer.parseInt(args[1]);try {System.out.println("连接到主机:" + serverName + ",端口号:" + port);Socket clientSocket = new Socket(serverName, port);System.out.println("远程主机地址为:" + clientSocket.getRemoteSocketAddress());// 创建客户端输出流,用于向服务器发送数据OutputStream outToServer = clientSocket.getOutputStream();// 将输出流转换为数据输出流DataOutputStream out = new DataOutputStream(outToServer);// 采用数据输出流的writeUTF()方法向服务器发送数据out.writeUTF("Hello from" + clientSocket.getLocalSocketAddress());// 创建客户端输入流,用于向接收来自服务的数据流InputStream inFromServer = clientSocket.getInputStream();// 将输入流转换为数据输入流DataInputStream in = new DataInputStream(inFromServer);// 读来自服务器的数据System.out.println("服务器响应:" + in.readUTF());// 关闭服务器套接字clientSocket.close();}catch(IOException e) {e.printStackTrace();}
}

服务器端代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;public class Server extends Thread{// Server类有一个私有的serverSocket对象引用,用于与客户端链接private ServerSocket serverSocket;// 构造函数,初始化serverSocketpublic Server(int port) throws IOException{// 创建一个ServerSocket对象,绑定到本地port数值表示的端口serverSocket = new ServerSocket(port);// 设置服务器超时时间为10000毫秒serverSocket.setSoTimeout(10000);}// 主功能模块public void run() {while(true) {try {System.out.println("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");// 等待客户端连接Socket server = serverSocket.accept();// 执行到这时,客户端已成功连接,打印客户端socket地址System.out.println("远程主机地址:" + server.getRemoteSocketAddress() );// 创建数据输入流,接收来自客户端的数据DataInputStream in = new DataInputStream(server.getInputStream());// 打印接受的数据System.out.println(in.readUTF());// 创建数据输出流DataOutputStream out = new DataOutputStream(server.getOutputStream());// 通过数据输出流,向客户端的发送数据out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress() + "\nGood bye!");server.close();}catch(SocketTimeoutException ste) {System.out.println("Socket timed out!");break;}catch(IOException ioe) {ioe.printStackTrace();break;}}}// 程序入口 public static void main(String[] args) {int port = Integer.parseInt(args[0]);try {Thread t = new Server(port);t.run();}catch(IOException ioe) {ioe.printStackTrace();}}
}

JAVA网络编程之Socket相关推荐

  1. 浅谈Java网络编程之Socket (2)

    <浅谈Java网络编程之Socket (1)>中我们已经和大家说到客户端的网络编程,下面和大家分享的是服务器的实现代码. import java.net.*; import java.io ...

  2. 浅谈Java网络编程之Socket (1)

    和大家一起分享的是Java网络编程之Socket.在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是get ...

  3. java网络编程之Socket编程

    概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...

  4. 超详细的逐句介绍Java网络编程之Socket类函数源码讲解(全)

    一.Socket类 Socket 类表示通信双方中的客户端,用于呼叫远端机器上的一个端口,主动向服务器端发送数据(当连接建立后也能接收数据).下面我将从源码的角度来介绍Socket类的内部原理及其方法 ...

  5. Java网络编程之Socket和ServerSocket详解

    Socket Socket是实现客户端套接字的类,套接字是两台计算机之间进行通信的端点. Socket的实际工作由SocketImpl类的实例执行 .通过更改用于创建套接字实现的套接字工厂,应用程序可 ...

  6. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. J ...

  7. Java网络编程之NIO编程(待补充)

    Java网络编程之NIO编程(待补充) 学习网站1:http://ifeve.com/java-nio-all/ 学习网站2:http://www.ibm.com/developerworks/cn/ ...

  8. 网络编程+go+java_GO语言的进阶之路-网络编程之socket

    GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...

  9. GO语言的进阶之路-网络编程之socket

    GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...

最新文章

  1. 页面加载完毕相关信息淡入效果
  2. java数字图像处理开题报告,数字图像处理开题报告.doc
  3. hbase全分布安装配置
  4. 2014创新工场校招笔试题及参考答案
  5. python 获取本地视频信息_python获取视频文件信息
  6. python版本时间_python 获取文件版本号和修改时间
  7. element-ui自定义手机号的验证
  8. 正则表达式匹配第一个单个字符
  9. 怎样把xp计算机语言改为英文,ghost xp如何将语言设置为英文
  10. 免费的身份证归属地查询接口
  11. gcc编译部分编译选项
  12. 爱普生发票打印机 每次连续打印发票,都跳页,中间一张空白
  13. openjudge 1.4.3 奇偶数判断
  14. cpu与主板的区别、独立显卡与集成显卡
  15. 布隆过滤器与布谷鸟过滤器
  16. html5 制作书架展示 PHP,简单做出HTML5翻页效果文字特效
  17. Jupyter notebook显示k线图集合
  18. django报错: Specifying a namespace in include() without providing an app_name
  19. 复制工具copy-to-clipboard
  20. Matlab建模—狗追人、地中海鲨鱼问题

热门文章

  1. 二十、深入Python迭代器和生成器
  2. NLP领域最近比较火的Prompt,能否借鉴到多模态领域?一文跟进最新进展
  3. 40万总奖金!顶级云服务免费用!2021全球高性能云计算创新大赛报名中!
  4. 如何搭建AIoT智能对话交互系统:技术解析和实操分享
  5. WWW 2021有哪些值得读的图机器学习相关论文?
  6. ACL 2020 | 基于多级排序学习的层次化实体标注
  7. 掌握AI核心技巧,一站式数据采集处理与智能识别公开课
  8. 机器学习理论《统计学习方法》学习笔记:第十一章 条件随机场(CRF)
  9. 十进制小数转换为二进制
  10. 表白记 BFS求最短路径