美文网首页
java利用socket实现客户端与服务器的连接与数据传递

java利用socket实现客户端与服务器的连接与数据传递

作者: Cholechow | 来源:发表于2018-12-09 15:39 被阅读0次

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个 socket。socket 也就是套接字,可以用来实现不同虚拟机或者不同计算机之间的通信。在 Java 语言中,socket 可以分为两种类型:面向连接的 socket 通信协议(TCP)和面向无连接的 socket 通信协议(UDP)。任何一个 socket 都是用 IP 地址与端口号唯一确定的。

    基于 TCP 的通信过程如下:

    首先,服务器端 Listen(监听)指定的某个端口是否有连接请求;其次,客户端想服务器端发出 Connect(连接) 请求;最后,服务器端向客户端返回 Accept(接受) 消息。一个连接就建立起来了,回话随即产生。服务器端与客户端都可以通过 Send,Write 等方法与对方通信。

    Socket 的生命周期有三部分:打开 Socket,使用 Socket 收发的数据与关闭 Socket。在 Java  语言中,可以使用 ServerSocket 作为服务器端,Socket 作为客户端来实现网络通信。

    这里我们为了简便,把客户端和服务器放到了一个包里面,最好是放在不同的工程里面!

    首先我们来看服务器端的代码:

    package 网络聊天;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.OutputStream;

    import java.io.PrintWriter;

    import java.net.ServerSocket;

    import java.net.Socket;

    import java.util.Scanner;

    public class L1{

    public L1(){

    try{

    ServerSocket ss=new ServerSocket(9999);//设置服务器的端口

    System.out.println("服务器正在监听");

    Socket s=ss.accept();//只有服务器被客户连接之后,才会执行后面的语句

    //System.out.println("22");//验证是否连接成功

    InputStreamReader isr=new InputStreamReader(s.getInputStream());//接收客户端的数据

    BufferedReader br=new BufferedReader(isr);//存入缓存

    String xinxi=br.readLine();//读出

    System.out.println(xinxi);//打印数据

    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//向客户端传数据

    pw.println("我是服务器");//数据是啥

    }catch(Exception e){

    }

    }

    public static void main(String args[]){

    L1 a=new L1();

    }

    }

    注释比较详细,我就不一一解释了

    然后是客户端的代码:

    package 网络聊天;

    import java.net.*;

    import java.io.*;

    public class L1_1 {

    public static void main(String[] args){

    L1_1 a=new L1_1();

    }

    public L1_1(){

    try{

    Socket s=new Socket("127.0.0.1",9999);//进入端口,前面是服务器的Ip,自己电脑一般是127.0.0.1,后面的是端口,与服务器对应

    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//IO流发送

    pw.println("我是客户端");//发送的内容

    //pw.flush();

    //s.shutdownInput();

    InputStream isr=s.getInputStream();//读取数据

    BufferedReader br=new BufferedReader(new InputStreamReader(isr));//存到缓存区

    String fanhui=br.readLine();//获取数据

    System.out.println(fanhui);//输出数据

    }catch(Exception e){

    }

    }

    }

    代码都写好之后呢,我们运行一个服务器的代码,启动服务器,console输出如下:

    此时服务器正在监听,等待客户端的链接

    然后我们运行客户端的代码,与服务器进行连接,此时服务器的终端显示为:

    这个表示连接成功啦,服务器接收到了客户端发的数据,然后客户端的终端显示为:

    这个表示客户端收到了服务器的数据啦!

    还有一个要注意的地方就是我们运行客户端代码的时候,终端会自动切换为客户端的,这个时候要查看服务器的终端则需要切换终端,如上图,点击那个黑色下拉小三角就可以切换啦!

    笔者当时运行时没看到服务器的数据输出可把我急坏了,当时一直以为是代码的问题,真的是心塞!!!

    好啦,这次就到这里啦,有问题可以和我留言哦!

    邮箱:2321591758@qq.com

    其他博客的链接:

    Github个人网站 知乎 简书

    欢迎各位访问哦,这次就到这里啦!

    相关文章

      网友评论

          本文标题:java利用socket实现客户端与服务器的连接与数据传递

          本文链接:https://www.haomeiwen.com/subject/nyfkhqtx.html