客户端socket

流程:

1、连接远程主机

2、发送数据

3、接收数据

4、关闭流与socket连接

实例:

  1. import java.io.*;
  2. import java.net.Socket;
  3. import java.util.Date;
  4.  
  5. /**
  6. * Created by CLY on 2017/7/11.
  7. */
  8. public class ClientSocket {
  9. public static void main(String[] arg){
  10. int port = 233;//与之连接的服务端套接字的端口号
  11. String host = "127.0.0.1";//与之连接的服务端套接字ip地址
  12. Socket socket = null;
  13. try {
  14. //创建socket连接,即在该Socket构造函数返回之前,就会与远程主机建立连接,如果未能连接,则会抛出异常。
  15. socket = new Socket(host, port);
  16.  
  17. //获取输出流,向服务器端发送当前时间
  18. OutputStream outputStream = socket.getOutputStream();
  19. Writer writer = new OutputStreamWriter(outputStream);
  20. String now_date = new Date().toString();
  21. writer.write("客户端当前时间为——"+now_date);
  22. writer.flush();
  23. ////关闭客户端的输出流。相当于给流中加入一个结束标记-1.这个样子服务器的输入流的reaLine方法就会读到一个-1,然后结束readLIne方法。
  24. socket.shutdownOutput();
  25.  
  26. //获取输入流,并读取服务器端的响应信息
  27. InputStream inputStream= socket.getInputStream();
  28. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  29. String server_info = null;
  30. while((server_info=br.readLine())!=null){
  31. System.out.println("服务端传过来的值:"+server_info);
  32. }
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. } finally {
  36. //如果socket不为null,则释放掉它
  37. if (socket!=null){
  38. try {
  39. socket.close();
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. }
  45. }
  46. }

服务端Socket

流程:

1、绑定端口

2、监听入站数据

3、在绑定的端口上接受来自远程机器的连接

4、接收数据

5、发送数据

6、关闭流与socket连接

实例:

  1. import java.io.*;
  2. import java.net.InetAddress;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. import java.util.Date;
  6. import java.util.concurrent.ExecutorService;
  7. import java.util.concurrent.Executors;
  8.  
  9. /**
  10. * Created by CLY on 2017/7/11.
  11. */
  12. public class MyServerSocket {
  13. public static void main(String[] arg){
  14. /**
  15. * 根据tcp协议可知,所谓套接字(socket)是指一个由“ip地址+端口”组成的组合。
  16. * 而每一台主机的ip地址都是确定的,不需要我们来指定,
  17. * 所以构建服务器socket的第一步就是确定端口
  18. */
  19. try {
  20. int port = 233;//端口号
  21. int queueLength = 50;//最大入站连接
  22. InetAddress bindAddress = InetAddress.getByName("127.0.0.1");//只监听该ip的指定端口
  23. ExecutorService pool = Executors.newFixedThreadPool(50);//创建一个最大容量为50的线程池,为每一个入站连接分配一条线程。
  24.  
  25. //创建一个端口为“233”的服务器socket
  26. ServerSocket serverSocket = new ServerSocket(port);
  27.  
  28. //创建一个端口为233的服务器socket,且队列一次最多能保存50个入站连接
  29. //ServerSocket serverSocket = new ServerSocket(port,queueLength);
  30.  
  31. //假设一台主机有多个ip地址,则服务器socket会默认在所有ip地址的指定端口上监听,但可以指定其只监听指定ip的端口。
  32. //ServerSocket serverSocket = new ServerSocket(port,queueLength,bindAddress);
  33.  
  34. while (true){
  35. //accept()调用会阻塞,会一直等到有客户端连接到指定socket端口为止。
  36. final Socket connection = serverSocket.accept();
  37.  
  38. //线程池中拿取一条线程来处理socket连接。然后主程序运行下一个循环,继续等待下一个客户端的访问。
  39. pool.execute(new Runnable() {
  40. public void run() {
  41. try {
  42. //从输入流中读取获取客户端传过来的值
  43. InputStream inputStream= connection.getInputStream();
  44. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  45. String client_info = null;
  46. while((client_info=br.readLine())!=null){
  47. System.out.println("客户端传过来的值:"+client_info);
  48. }
  49.  
  50. //测试:将当前时间写入流中返回给客户端
  51. Writer writer = new OutputStreamWriter(connection.getOutputStream());
  52. String nowData = new Date().toString();
  53. writer.write("服务端当前时间为——"+nowData);
  54. writer.flush();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. } finally {
  58. try {
  59. //关闭socket连接
  60. connection.close();
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. }
  66. });
  67. }
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }

java套接字(socket)实例的更多相关文章

  1. Java套接字Socket编程--TCP参数

    在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...

  2. [置顶] Java套接字Socket编程

    1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...

  3. Java套接字socket编程笔记

    相对于C和C++来说,Java中的socket编程是比较简单的,比较多的细节都已经被封装好了,每次创建socket连接只需要知道地址和端口即可. 在了解socket编程之前,我们先来了解一下读写数据的 ...

  4. 进程间通信系列 之 socket套接字及其实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  5. Java网络编程--套接字Socket

    一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...

  6. Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()

    前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...

  7. Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

  8. 套接字socket 的地址族和类型、工作原理、创建过程

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  9. 套接字编程,创建套接字socket

    1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...

  10. 什么是套接字(Socket)

    应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连 ...

随机推荐

  1. Django - models.py 应用

    Django - models.py 应用 编写 models.py 文件 from django.db import models # Create your models here. class ...

  2. Eclipse安装lombok

    下载lombok 下载地址:https://projectlombok.org/downloads/lombok.jar 或者访问官网下载  https://projectlombok.org/ 安装 ...

  3. 雷林鹏分享:C# 类型转换

    C# 类型转换 类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型.在 C# 中,类型铸造有两种形式: 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换.例如,从小的 ...

  4. 雷林鹏分享:C# 可空类型(Nullable)

    C# 可空类型(Nullable) C# 可空类型(Nullable) C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 nu ...

  5. centos 下卸载mysql

    查看当前已安装服务 [root@localhost]# rpm -qa|grep -i mysqlMySQL-server-5.6.36-1.rhel5.x86_64qt-mysql-4.8.5-13 ...

  6. .NET的关于人脸识别引擎分享(C#)

    https://www.cnblogs.com/RainbowInTheSky/p/10247921.html

  7. linux进程管理之进程查看

    查看进程 process ====================================================================================了解如 ...

  8. 用ActionController::Renderer的render方法渲染模版

    使用Cable进行pub: ActionCable.server.broadcast "call", {address: AddressesController.render(@a ...

  9. (未完成👃)You Don't Know JS: Scope & Closures (第5章: Scope & Closures)

    Chapter 5: Scope Closure 我们到达这里时,已经对作用域如何工作有了非常健康稳固的理解. 下面,我们转移注意力到一个及其重要,但长期难以理解,几乎是神话中的部分语言:Closur ...

  10. P4557 [JSOI2018]战争

    首先可以题目描述的两个点集是两个凸包,分别设为A和B. 考虑一个向量w不合法的条件. 即存在b+w=a,其中a属于A,b属于B. 也就是a-b=w. 即对b取反后和a的闵可夫斯基和. 求出闵可夫斯基和 ...