资讯专栏INFORMATION COLUMN

Java Socket编程之TCP编程

i_garfileo / 986人阅读

摘要:编程之编程全套的基础编程基础及深入讲解协议是面向连接的可靠的有序的以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低中基于协议实现网络通信的类客户端的类服务器端的类通信的步骤创建和打

Java Socket编程之TCP编程

全套的:https://www.yuque.com/shizhiy...
基础:https://blog.51cto.com/wangdy/1588379
Java Socket编程基础及深入讲解:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html

TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低

Java中基于TCP协议实现网络通信的类

客户端的Socket类

服务器端的ServerSocket类

Socket通信的步骤

                ① 创建ServerSocket和Socket
                ② 打开连接到Socket的输入/输出流
                ③ 按照协议对Socket进行读/写操作
                ④ 关闭输入输出流、关闭Socket

服务器端:

               ① 创建ServerSocket对象,绑定监听端口
                ② 通过accept()方法监听客户端请求
                ③ 连接建立后,通过输入流读取客户端发送的请求信息
                ④ 通过输出流向客户端发送乡音信息
                ⑤ 关闭相关资源
**

   /**
         * 基于TCP协议的Socket通信,实现用户登录,服务端
         */
        //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
        ServerSocket serverSocket = new ServerSocket(10086);//1024-65535的某个端口
        //2、调用accept()方法开始监听,等待客户端的连接
        Socket socket = serverSocket.accept();
        //3、获取输入流,并读取客户端信息
        InputStream is = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("我是服务器,客户端说:" + info);
        }
        socket.shutdownInput();//关闭输入流
        //4、获取输出流,响应客户端的请求
        OutputStream os = socket.getOutputStream();
        PrintWriter pw = new PrintWriter(os);
        pw.write("欢迎您!");
        pw.flush();


        //5、关闭资源
        pw.close();
        os.close();
        br.close();
        isr.close();
        is.close();
        socket.close();
        serverSocket.close();

客户端:

                ① 创建Socket对象,指明需要连接的服务器的地址和端口号
                ② 连接建立后,通过输出流想服务器端发送请求信息
                ③ 通过输入流获取服务器响应的信息
                ④ 关闭响应资源 

//客户端
//1、创建客户端Socket,指定服务器地址和端口
Socket socket =newSocket("localhost",10086);
//2、获取输出流,向服务器端发送信息
OutputStream os = socket.getOutputStream();//字节输出流
PrintWriter pw =newPrintWriter(os);//将输出流包装成打印流
pw.write("用户名:admin;密码:123");
pw.flush();
socket.shutdownOutput();
//3、获取输入流,并读取服务器端的响应信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while((info=br.readLine())!null){
 System.out.println("我是客户端,服务器说:"+info);
}

//4、关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();

应用多线程实现服务器与多客户端之间的通信

              ① 服务器端创建ServerSocket,循环调用accept()等待客户端连接
              ② 客户端创建一个socket并请求和服务器端连接
              ③ 服务器端接受苦读段请求,创建socket与该客户建立专线连接
              ④ 建立连接的两个socket在一个多带带的线程上对话
              ⑤ 服务器端继续等待新的连接     

//服务器线程处理
//和本线程相关的socket
Socket socket =null;
//
public serverThread(Socket socket){
this.socket = socket;
}

publicvoid run(){
//服务器处理代码
}

//============================================
//服务器代码
ServerSocket serverSocket =newServerSocket(10086);
Socket socket =null;
int count =0;//记录客户端的数量
while(true){
socket = serverScoket.accept();
ServerThread serverThread =newServerThread(socket);
 serverThread.start();
 count++;
System.out.println("客户端连接的数量:"+count);
}

[链接]()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74377.html

相关文章

  • Java Socket编程常识网络基础知识

    摘要:如地址端口号组成了所谓的,是网络上运行的程序之间双向通信链路的终结点,是和的基础套接字网络上具有唯一标识的地址和端口组合在一起才能构成唯一能识别的标识符套接字。 更多物联网高并发编程知识请移步:https://www.yuque.com/shizhiy... Java Socket编程之常识网络基础知识 网络基础知识(参考计算机网络)  《TCP/IP协议栈及OSI参考模型详解》  ...

    Jeff 评论0 收藏0
  • Android网络编程Socket

    摘要:面向字节流流,指的是流入到进程或从进程流出的字符序列。即收到连接信息后向返回确认信息第三次握手客户端收到服务器的报文段,并向服务器发送报文段。 前言 Socket的使用在 Android网络编程中非常重要 今天我将带大家全面了解 Socket 及 其使用方法 目录 showImg(https://segmentfault.com/img/remote/14600000113508...

    The question 评论0 收藏0
  • PHP回顾socket编程

    摘要:如果你想体验原味编程,用开头的比较适合否则建议使用流函数。有关流的知识,请参考本人之前的博文回顾之流。接下来我们用流函数实现一个简单的客户端和服务端。流函数中的和两个函数是我们想要的。本文目的是简要介绍中的编程,行文到此已经达到目的。 转载请注明文章出处: https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie w...

    tomorrowwu 评论0 收藏0
  • Android网络编程8源码解析OkHttp中篇[复用连接池]

    摘要:构造函数默认空闲的最大连接数为个,的时间为秒通过构造函数可以看出默认的空闲的最大连接数为个,的时间为秒。实例化实例化是在实例化时进行的在的构造函数中调用了省略省略缓存操作提供对进行操作的方法分别为和几个操作。 1.引子 在了解OkHttp的复用连接池之前,我们首先要了解几个概念。 TCP三次握手 通常我们进行HTTP连接网络的时候我们会进行TCP的三次握手,然后传输数据,然后再释放连接...

    fasss 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<