当我们想要在Java中使用TCP/IP通过网络连接到服务器时,就需要创建java.net.Socket对象并连接到服务器。假如希望使用Java NIO,也可以创建Java NIO中的SocketChannel对象。
创建Socket
下面的示例代码是连接到IP地址为78.64.84.171服务器上的80端口,这台服务器就是我们的Web服务器(www.jenkov.com),而80端口就是Web服务端口。
Socket socket = new Socket("78.46.84.171", 80);
我们也可以像如下示例中使用域名代替IP地址:
Socket socket = new Socket("jenkov.com", 80);
Socket发送数据
要通过Socket发送数据,我们需要获取Socket的输出流(OutputStream),示例代码如下:
Socket socket = new Socket("jenkov.com", 80); OutputStream out = socket.getOutputStream(); out.write("some data".getBytes()); out.flush(); out.close(); socket.close();
代码非常简单,但是想要通过网络将数据发送到服务器端,一定不要忘记调用flush()方法。操作系统底层的TCP/IP实现会先将数据放入一个更 大的数据缓存块中,而缓存块的大小是与TCP/IP的数据包大小相适应的。(译者注:调用flush()方法只是将数据写入操作系统缓存中,并不保证数据 会立即发送)
Socket读取数据
从Socket中读取数据,我们就需要获取Socket的输入流(InputStream),代码如下:
Socket socket = new Socket("jenkov.com", 80); InputStream in = socket.getInputStream(); int data = in.read(); //... read more data... in.close(); socket.close();
代码也并不复杂,但需要注意的是,从Socket的输入流中读取数据并不能读取文件那样,一直调用read()方法直到返回-1为止,因为对 Socket而言,只有当服务端关闭连接时,Socket的输入流才会返回-1,而是事实上服务器并不会不停地关闭连接。假设我们想要通过一个连接发送多 个请求,那么在这种情况下关闭连接就显得非常愚蠢。
因此,从Socket的输入流中读取数据时我们必须要知道需要读取的字节数,这可以通过让服务器在数据中告知发送了多少字节来实现,也可以采用在数据末尾设置特殊字符标记的方式连实现。
关闭Socket
当使用完Socket后我们必须将Socket关闭,断开与服务器之间的连接。关闭Socket只需要调用Socket.close()方法即可,代码如下:
Socket socket = new Socket("jenkov.com", 80); socket.close();
相关推荐
java socket教程java socket教程java socket教程
JAVA Socket教程 Java网络编程之传输控制协议 Socket套接字—Java套接字编程
JAVA Socket 网络编程教程 JAVA Socket 网络编程教程
主要介绍了Java网络编程基础教程之Socket入门实例,本文讲解了创建Socket、Socket发送数据、Socket读取数据、关闭Socket等内容,都是最基础的知识点,需要的朋友可以参考下
《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket...《Java TCP/IP Socket编程(原书第2版)》适合作为Java Socket编程的入门教程,也可供从事网络相关专业的技术人员参考。
java网络编程包括socket tcp/udp io/nio讲解 http协议 jdbc rmi java的安全框架等知识
【完整课程列表】 ... 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt
基于java的网络程序设计教程
详细讲述了socket得应用。多线程socket应用
Socket的概念 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第8页。 端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留。 Socket...
【完整课程列表】 ... 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt
【完整课程列表】 ... 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt
【完整课程列表】 ...推荐完整精品Java教程 中软国际Java培训课件 Java核心技术全套课程 21-Socket网络(共27页).ppt 推荐完整精品Java教程 中软国际Java培训课件 Java核心技术全套课程 22-网络编程(共17页).ppt
【完整课程列表】 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt
【完整课程列表】 ...推荐完整精品Java教程 中软国际Java培训课件 Java核心技术全套课程 21-Socket网络(共27页).ppt 推荐完整精品Java教程 中软国际Java培训课件 Java核心技术全套课程 22-网络编程(共17页).ppt
【完整课程列表】 ... 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt
【完整课程列表】 ... 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt
1、本项目则是使用Java实现TCP的Socket网络通信,包含C/S软件架构的程序设计,偏向实践,更加有趣! 2、实现简单有趣的“创意”聊天机器人。 3、建立通信规则: Server和Client之间需要约定相同的规则,保证正常通信...
让大家对Socket有个大概的概念与方向。之后通过几个小Case引出课程的主角,轻松愉快的让你体验到Socket编程的快感。本章节主要收获:1. 明白什么是网络编程,2. 理解Socket与TCP、UDP的关系 3. 明白网络传输中的报文...
【完整课程列表】 ... 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt ...完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt