美文网首页学习
Socket套接字编程

Socket套接字编程

作者: 情安 | 来源:发表于2021-06-23 10:58 被阅读0次

1.介绍

Socket也叫套接字编程,是一个抽象层。
应用程序可以通过它发送或接收数据,可对其像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。
网络套接字是IP地址与端口与tcp协议的组合。
Socket就是为网络编程提供的一种机制 / 通信的两端都有Socket。
网络通信其实就是Socket间的通信 / 数据在两个Socket间通过I/O传输。



查看本机ip地址:打开DOS窗口输入-ipconfig

回声案列

2.服务器端

1,启动服务器
2,接收客户端的连接请求
3,给每个客户端分配对应的话务员
4,话务员:主要负责和客户端沟通I/O

package cn.tedu.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//这个类用来做回声案例的服务器端
public class Server2 {
    // 创建方法,负责1和2和3
    public void service() {
       // 在服务器端,使用多线程开发,让每个客户端之间不用等待,可以并发访问,提高服务器的执行效率,提高吞吐量
       new Thread() {// 匿名对象+匿名内部类(重写run方法)
           // 把业务写入run()中
           @Override
           public void run() {
              try {
                  // 1,启动服务器,并在8000端口处等待客户端连接
                  ServerSocket server = new ServerSocket(8000);
                  System.out.println("服务器启动成功...");
                  while (true) {
                     // 2,一直接收所有客户端的连接请求
                     Socket socket = server.accept();
                     System.out.println("客户端连接成功...");
                     // 3,给每个客户端分配对应的话务员,1V1
                     HuaWuThread t = new HuaWuThread(socket);
                     t.start();
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
           }
       }.start();// 启动线程
    }
    // 4,话务员:主要负责和客户端沟通I/O
    class HuaWuThread extends Thread {
       Socket socket;// 保持通话
       public HuaWuThread(Socket socket) {
           this.socket = socket;
       }
       // 把业务放入run(),一直读取客户端发来的数据,并作出回声数据
       @Override
       public void run() {
           try {
              //读取一行BufferedReader,并且写出一行PrintWriter
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())) ;
              //读取客户端发来 的一行数据
              String line;//定义变量,记录读取到的一行的数据
              while( ( line = in.readLine() ) != null) {//只要有数据就一直读
                  System.out.println("客户端发来的数据是:"+line);
                  System.out.println("请输入您想要给客户端回声的数据:");
                  String input = new Scanner(System.in).nextLine();
                  out.println(input);//给客户端做的回声数据
                  out.flush();//把数据刷出去
              }
           } catch (IOException e) {
              e.printStackTrace();
           }
       }
    }
    public static void main(String[] args) {
       Server2 s = new Server2();
       s.service();
    }
}

3.客户端

1,连接指定的服务器
2,一直给服务器发送数据
3,一直接收服务器回声的数据

package cn.tedu.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
//这个类用来做回声案例的客户端
public class Client2 {
    public static void main(String[] args) {
       try {
           // 1,连接指定的服务器,同时指定服务器的ip和端口号
           Socket socket = new Socket("127.0.0.1",8000);
           // 2,一直给服务器发送数据
           while(true) {
              //向服务器写出一行数据,并且读取服务器回声回来的一行数据
              PrintWriter out = new PrintWriter( new OutputStreamWriter(socket.getOutputStream()));
              BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
              // 3,一直发送一直读取
              System.out.println("请输入您想要给服务器端发送的数据:");
              String input = new Scanner(System.in).nextLine();
              out.println(input);//向服务器发送了指定数据
              out.flush();//把数据刷出去
              String line = in.readLine();//读取回声数据
              System.out.println("服务器的回声数据是:"+line);
           }
       }catch (IOException e) {
           e.printStackTrace();
       }
    }
}

4.主要方法

构造方法:

      ServerSocket(int port)

      创建绑定到特定端口的服务器套接字。

常用方法:

      Socket accept()

      侦听并接受到此套接字的连接。

void close()关闭此套接字。
启动服务:ServerSocket ss = new ServerSocket(端口);
等待客户端发起连接,并建立连接通道:Sokcet socket = ss.accept();
构造方法:

      Socket(String host, int port)

      创建一个流套接字并将其连接到指定主机上的指定端口号。

常用方法:

InputStream getInputStream()

      返回此套接字的输入流。

OutputStream getOutputStream()

      返回此套接字的输出流。

新建Socket对象,连接指定的ip指定的端口:Socket s = new Socket(ip, port);
从Socket获取双向的流:
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();

相关文章

  • 2018-09-12 Day18 网络基础

    01.socket编程 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字。套接字编程:...

  • 2018-09-12 day18-网络基础

    总结 一.socket编程 socket又叫套接字,就是进行数据通信两端,分为服务端套接字和客户端套接字套接字编程...

  • 18总 网络基础

    1.socket编程: socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字套接字编程:自...

  • 2018-09-12 day18网络基础总结

    一socket编程 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字套接字编程:自己写...

  • 2018-09-12-总结

    一、socket编程 socket又叫套接字,就是进行数据通信的两端。分为服务端套接字和客户端套接字套接字编程:自...

  • 2018-09-12 day18网络编程

    1.socket套接字 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字 套接字编程:...

  • python网络编程基础

    1.socket编程 socket又叫套接字socket编程其实就是用代码来实现进行网络通讯的两个端;套接字就是实...

  • Day18—网络基础

    1 socket socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字。套接字编程:自己写...

  • day18markdown总结

    网络基础 1.socket编程 socket又叫套接字,就是进行数据通信两端,分为服务端套接字和客户端套接字套接字...

  • day18-网络基础总结

    一、scoket编程: socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字套接字编程:自...

网友评论

    本文标题:Socket套接字编程

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