JAVA网络编程之Socket
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相关推荐
- 浅谈Java网络编程之Socket (2)
<浅谈Java网络编程之Socket (1)>中我们已经和大家说到客户端的网络编程,下面和大家分享的是服务器的实现代码. import java.net.*; import java.io ...
- 浅谈Java网络编程之Socket (1)
和大家一起分享的是Java网络编程之Socket.在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是get ...
- java网络编程之Socket编程
概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...
- 超详细的逐句介绍Java网络编程之Socket类函数源码讲解(全)
一.Socket类 Socket 类表示通信双方中的客户端,用于呼叫远端机器上的一个端口,主动向服务器端发送数据(当连接建立后也能接收数据).下面我将从源码的角度来介绍Socket类的内部原理及其方法 ...
- Java网络编程之Socket和ServerSocket详解
Socket Socket是实现客户端套接字的类,套接字是两台计算机之间进行通信的端点. Socket的实际工作由SocketImpl类的实例执行 .通过更改用于创建套接字实现的套接字工厂,应用程序可 ...
- Java网络编程之TCP、UDP
Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. J ...
- Java网络编程之NIO编程(待补充)
Java网络编程之NIO编程(待补充) 学习网站1:http://ifeve.com/java-nio-all/ 学习网站2:http://www.ibm.com/developerworks/cn/ ...
- 网络编程+go+java_GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
最新文章
- 页面加载完毕相关信息淡入效果
- java数字图像处理开题报告,数字图像处理开题报告.doc
- hbase全分布安装配置
- 2014创新工场校招笔试题及参考答案
- python 获取本地视频信息_python获取视频文件信息
- python版本时间_python 获取文件版本号和修改时间
- element-ui自定义手机号的验证
- 正则表达式匹配第一个单个字符
- 怎样把xp计算机语言改为英文,ghost xp如何将语言设置为英文
- 免费的身份证归属地查询接口
- gcc编译部分编译选项
- 爱普生发票打印机 每次连续打印发票,都跳页,中间一张空白
- openjudge 1.4.3 奇偶数判断
- cpu与主板的区别、独立显卡与集成显卡
- 布隆过滤器与布谷鸟过滤器
- html5 制作书架展示 PHP,简单做出HTML5翻页效果文字特效
- Jupyter notebook显示k线图集合
- django报错: Specifying a namespace in include() without providing an app_name
- 复制工具copy-to-clipboard
- Matlab建模—狗追人、地中海鲨鱼问题