java套接字(socket)实例

客户端socket

流程:

1、连接远程主机

2、发送数据

3、接收数据

4、关闭流与socket连接

实例:

import java.io.*;
import java.net.Socket;
import java.util.Date;

/**
 * Created by CLY on 2017/7/11.
 */
public class ClientSocket {
    public static void main(String[] arg){
        int port = 233;//与之连接的服务端套接字的端口号
        String host = "127.0.0.1";//与之连接的服务端套接字ip地址
        Socket socket = null;
        try {
            //创建socket连接,即在该Socket构造函数返回之前,就会与远程主机建立连接,如果未能连接,则会抛出异常。
            socket = new Socket(host, port);

            //获取输出流,向服务器端发送当前时间
            OutputStream outputStream = socket.getOutputStream();
            Writer writer = new OutputStreamWriter(outputStream);
            String now_date = new Date().toString();
            writer.write("客户端当前时间为——"+now_date);
            writer.flush();
            ////关闭客户端的输出流。相当于给流中加入一个结束标记-1.这个样子服务器的输入流的reaLine方法就会读到一个-1,然后结束readLIne方法。
            socket.shutdownOutput();

            //获取输入流,并读取服务器端的响应信息
            InputStream inputStream= socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
            String server_info = null;
            while((server_info=br.readLine())!=null){
                System.out.println("服务端传过来的值:"+server_info);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //如果socket不为null,则释放掉它
            if (socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

服务端Socket

流程:

1、绑定端口

2、监听入站数据

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

4、接收数据

5、发送数据

6、关闭流与socket连接

实例:

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by CLY on 2017/7/11.
 */
public class MyServerSocket {
    public static void main(String[] arg){
        /**
         * 根据tcp协议可知,所谓套接字(socket)是指一个由“ip地址+端口”组成的组合。
         * 而每一台主机的ip地址都是确定的,不需要我们来指定,
         * 所以构建服务器socket的第一步就是确定端口
         */
        try {
            int port = 233;//端口号
            int queueLength = 50;//最大入站连接
            InetAddress bindAddress = InetAddress.getByName("127.0.0.1");//只监听该ip的指定端口
            ExecutorService pool = Executors.newFixedThreadPool(50);//创建一个最大容量为50的线程池,为每一个入站连接分配一条线程。

            //创建一个端口为“233”的服务器socket
            ServerSocket serverSocket = new ServerSocket(port);

            //创建一个端口为233的服务器socket,且队列一次最多能保存50个入站连接
            //ServerSocket serverSocket = new ServerSocket(port,queueLength);

            //假设一台主机有多个ip地址,则服务器socket会默认在所有ip地址的指定端口上监听,但可以指定其只监听指定ip的端口。
            //ServerSocket serverSocket = new ServerSocket(port,queueLength,bindAddress);

            while (true){
                //accept()调用会阻塞,会一直等到有客户端连接到指定socket端口为止。
                final Socket connection = serverSocket.accept();

                //线程池中拿取一条线程来处理socket连接。然后主程序运行下一个循环,继续等待下一个客户端的访问。
                pool.execute(new Runnable() {
                    public void run() {
                        try {
                            //从输入流中读取获取客户端传过来的值
                            InputStream inputStream= connection.getInputStream();
                            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                            String client_info = null;
                            while((client_info=br.readLine())!=null){
                                System.out.println("客户端传过来的值:"+client_info);
                            }

                            //测试:将当前时间写入流中返回给客户端
                            Writer writer = new OutputStreamWriter(connection.getOutputStream());
                            String nowData = new Date().toString();
                            writer.write("服务端当前时间为——"+nowData);
                            writer.flush();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                //关闭socket连接
                                connection.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
时间: 2024-10-06 08:37:57

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

Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

专题七.网络编程之套接字Socket、TCP和UDP通信实例

https://blog.csdn.net/Eastmount/article/details/48909861 找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. https://www.cnblogs.com/alex3714/articles/5227251.html 1.Socket语法及相关 2.SocketSer

Java套接字编程实现群聊与私聊[原理版]

简介 运用Java套接字我们几乎可以完成一个网络聊天软件的小产品,本文不涉及UI部分,仅对原理部分用代码演示一下.一个可以多人聊天的小功能,在Linux系统上用telnet亲测可用. 服务器代码 package demo0811.demo3; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.

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

前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套接字 socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行.也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信.也因为这样,套接字明确地将客户端和服务器区分开来. 相对于流套接字,数据报套接字的

网络---中断套接字Socket

1 package socketpack_2; 2 import java.awt.BorderLayout; 3 import java.awt.EventQueue; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.ActionListener; 6 import java.io.IOException; 7 import java.io.OutputStream; 8 import java.io.PrintWrit

回写、套接字socket 、JVM映像、实际/抽象回话

1.什么是回写? 回写:更新多维数据集单元值.成员或成员属性值. 操作系统和平台上的应用程序在运行的时候需要往磁盘写入临时数据,但是在无盘环境下,没有硬盘作为操作系统和应用程序临时的交换数据空间,所以这个任务必须交给服务器来完成 计算机回写:“Write Back(回写),在回写状态下,数据只有在要被从高速缓存中清除时才写到磁盘上.随着主存读取的数据增加,回写需要开始从高速缓存中向磁盘上写数据,并把更新的数据写入高速缓存中.由于一个数据可能会被写入高速缓存中许多次,而没有进行磁盘存取,所以回写的

什么是套接字(Socket)

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接. 生成套接字,主要有3个参数:通信的目的IP地址.使用的传输 层协议(TCP或UDP)和使用的端口号.Socket原意是“插座”.通过将这3个参数结合起来,与一个“

套接字—Socket

网络编程就不得不提大名鼎鼎的套接字-Socket 一,什么是Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket.Socket的英文原意是"插座",通常称之为套接字,来描述IP地址和端口,是一个通信链的句柄,用来实现不同虚拟机或者计算机之间的通信. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,与不同客户端的不同服务对应着不同的Socket,这样实现了与多个服务器

什么是套接字(Socket)?套接字(Socket)是什么意思?(转)

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接. 网络化的应用程序在开始任何通讯之前都必需要创建套接字.就像电话的插口一样,没有它就完全没办法通信. 生成套接字,主要有3个参数:通信的目的IP地址.使用的传输层协议(