Java网络编程基础教程之Socket入门实例

 更新时间:2014年09月19日 10:26:11   投稿:junjie  
这篇文章主要介绍了Java网络编程基础教程之Socket入门实例,本文讲解了创建Socket、Socket发送数据、Socket读取数据、关闭Socket等内容,都是最基础的知识点,需要的朋友可以参考下

当我们想要在Java中使用TCP/IP通过网络连接到服务器时,就需要创建java.net.Socket对象并连接到服务器。假如希望使用Java NIO,也可以创建Java NIO中的SocketChannel对象。

创建Socket

下面的示例代码是连接到IP地址为78.64.84.171服务器上的80端口,这台服务器就是我们的Web服务器(www.jb51.net),而80端口就是Web服务端口。

复制代码 代码如下:

Socket socket = new Socket("78.46.84.171", 80);

我们也可以像如下示例中使用域名代替IP地址:
复制代码 代码如下:

Socket socket = new Socket("jb51.net", 80);

Socket发送数据

要通过Socket发送数据,我们需要获取Socket的输出流(OutputStream),示例代码如下:

复制代码 代码如下:

Socket socket = new Socket("jb51.net", 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("jb51.net", 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("jb51.net", 80);

socket.close();


(全文完)

相关文章

  • SpringBoot中定时任务@Scheduled注解的使用解读

    SpringBoot中定时任务@Scheduled注解的使用解读

    这篇文章主要介绍了SpringBoot中定时任务@Scheduled注解的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Java环境变量的设置方法(图文教程)

    Java环境变量的设置方法(图文教程)

    想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的。
    2013-05-05
  • 教你如何监控 Java 线程池运行状态的操作(必看)

    教你如何监控 Java 线程池运行状态的操作(必看)

    这篇文章主要介绍了教你如何监控 Java 线程池运行状态的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot JWT实现token登录刷新功能

    SpringBoot JWT实现token登录刷新功能

    JWT本身是无状态的,这点有别于传统的session,不在服务端存储凭证。这种特性使其在分布式场景,更便于扩展使用。接下来通过本文给大家分享SpringBoot JWT实现token登录刷新功能,感兴趣的朋友一起看看吧
    2021-09-09
  • java中子类继承父类,程序运行顺序的深入分析

    java中子类继承父类,程序运行顺序的深入分析

    本篇文章是对java中子类继承父类,程序运行顺序进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • springboot整合mybatis分页拦截器的问题小结

    springboot整合mybatis分页拦截器的问题小结

    springboot整合mybatis分页拦截器,分页拦截实际上就是获取sql后将sql拼接limit,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-07-07
  • springcloud使用profile实现多环境配置方式

    springcloud使用profile实现多环境配置方式

    这篇文章主要介绍了springcloud使用profile实现多环境配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java数据结构之查找

    Java数据结构之查找

    本文主要介绍了Java数据结构中查找的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Spring boot中mongodb的使用

    Spring boot中mongodb的使用

    MongoDB是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多。这篇文章主要介绍了Spring boot中mongodb的使用,需要的朋友可以参考下
    2017-05-05
  • 在Spring-Boot中如何使用@Value注解注入集合类

    在Spring-Boot中如何使用@Value注解注入集合类

    这篇文章主要介绍了在Spring-Boot中如何使用@Value注解注入集合类的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论