我是靠谱客的博主 安详大碗,最近开发中收集的这篇文章主要介绍java网络编程之基于TCP的socket编程,实现客户端和服务器相互通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于socket通信,收获了很多。
转自:https://blog.csdn.net/LJH_laura_li/article/details/82430038
视频:https://www.bilibili.com/video/av33558958/?spm_id_from=333.788.videocard.5

网络通信

首先说网络通信,网络通信使用IP地址标识internet上的计算机,使用端口号标识服务器上的进程(程序)。也就是说,如果服务器上的一个程序不占用一个端口号,用户程序就无法找到它,就无法和该程序交互通信。端口号选取大于1023。
当两个程序需要通信时,它们可以通过使用Socket类建立套接字并连接在一起(端口号与IP地址的组合得出一个网络套接字)

套接字
它允许程序把网络连接看成一个流(stream),可以向这个流写字节,也可以从这个流读取字节。
Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写程序在网络上传递数据。在JAVA中,有专门的Socket类处理用户的请求和响应。利用Socket的方法,就可以实现两台计算机之间的通信。
Socket是网络驱动层提供给应用程序的接口和一种机制。Socket能执行7种基本操作:
1.连接到远程机器
2.绑定到端口
3.接收从远程机器来的绑定端口上的连接
4.监听到达的数据
5.发送数据
6.接收数据
7.关闭连接
套接字有两种:一种套接字在服务器端创建,叫做服务端套接字(ServerSocket);还有一种在客户端被创建,叫做客户端套接字(Socket)。

客户端套接字
客户端程序使用socket类建立负责连接到服务器的套接字对象。
Socket的构造方法是Socket(String host, int port),参数host是服务器的IP地址,port是一个端口号。

try{    Socket clientSocket = new Socket("http://192.168.0.78",2010);
}
catch(IOException e){}

当套接字对象clientSocket建立后,可以使用方法getInputStream()获得一个输入流,这个输入流的源和服务器端的一个输出流刚好对应,因此客户端用输入流可以读取服务器写入到输出流中的数据。

ServerSocket对象与服务器端套接字
为了能使客户端成功的连接到服务器,服务器必须建立一个ServerSocket对象(像生活中邮局窗口的业务员),通过accept函数监听客户端的连接请求,如收到连接请求,则接受客户端的连接,并生成连接套接字用于通信使用。
ServerSocket的构造方法是ServerSocket(int port),port是一个端口号。port必须和客户呼叫的端口号相同。

try{    ServerSocket serverForClient = new ServerSocket(2010);
}
catch(IOException e){}

若实现客户端和服务器相互通信,一定涉及到IO流

缓冲流
BufferedReader类创建的对象称为缓冲输入。
BufferedReader流能够读取文本行,方法是readLine()。

下面用代码讲解

代码实现了客户端和服务器对发数据,并且客户端输入bye,客户端停止;客户端输入ok,服务器停止

//服务器程序
package tcp;
import java.net.*;
import java.io.*;
 
public class TcpServer {
    public static void main(String[] args){
        try{
            //建立套接字
            ServerSocket server = new ServerSocket(4700);
            //监听
            Socket socket = server.accept();
            //建立连接
            InputStreamReader Sysin = new InputStreamReader(System.in);
            BufferedReader SysBuf = new BufferedReader(Sysin);
 
            InputStreamReader Socin = new InputStreamReader(socket.getInputStream());
            BufferedReader SocBuf = new BufferedReader(Socin);
 
            PrintWriter Socout = new PrintWriter(socket.getOutputStream());
 
            //通信
            System.out.println("Client:" + SocBuf.readLine());
            String readline = SysBuf.readLine();
            while(!readline.equals("bye")){
                Socout.println(readline);
                Socout.flush();
                System.out.println("Server:" + readline);
 
                String rl = SocBuf.readLine();
                if(!rl.equals("ok"))
                    System.out.println("Client:" + rl);
                else
                    break;
 
                readline = SysBuf.readLine();
            }
            //关闭IO、Socket
            Socout.close();
            Socin.close();
            server.close();
        }catch (Exception e){
            System.out.println("Error" + e);
        }
    }
}

//客户端程序
package tcp;
import java.net.*;
import java.io.*;
 
public class TcpClient {
    public static void main(String[] args)throws Exception{
        try{
            //创建Socket
            Socket socket = new Socket("127.0.0.1",4700);
 
            //建立连接
            InputStreamReader Sysin = new InputStreamReader(System.in);
            BufferedReader SysBuf = new BufferedReader(Sysin);
 
            InputStreamReader Socin = new InputStreamReader(socket.getInputStream());
            BufferedReader SocBuf = new BufferedReader(Socin);
 
            PrintWriter Socout = new PrintWriter(socket.getOutputStream());
 
            //进行通信
            String readline = SysBuf.readLine();
            while(!readline.equals("bye")){
                Socout.println(readline);
                Socout.flush();
                System.out.println("Client:" + readline);
 
                System.out.println("Server:" + SocBuf.readLine());
                readline = SysBuf.readLine();
            }
            //关闭IO和Socket
            Socout.close();
            Socin.close();
            socket.close();
        }catch(Exception e){
            System.out.println("Error:" + e);
        }
    }
}

执行
在这里插入图片描述
分别运行就可以
在这里插入图片描述
运行服务器代码与客户端代码,注意两个控制栏在eclipse中右下角的倒三角点开可以自由看,自由输入。

相当于客户端和服务端进行交互,客户端发送,服务端收到,服务端发送,客户端收到。

127.0.0.1为本地测试地址

最后

以上就是安详大碗为你收集整理的java网络编程之基于TCP的socket编程,实现客户端和服务器相互通信的全部内容,希望文章能够帮你解决java网络编程之基于TCP的socket编程,实现客户端和服务器相互通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部