(JAVA)Socket编程

转自https://www.cnblogs.com/liusxg/p/3917624.html

在这里插入图片描述

  • Server服务员端调用socket()创建socket

    • 通过bind()绑定端口
      • 再调用listen()监听端口
        • 最后使用accept()阻塞
  • Client客户端同样调用socket()创建socket

    • 使用connect()来寻找阻塞的Server端建立连接

然后两边开始传输信息

Client

import java.io.*;
import java.net.*;

public class Client {

    public static void main(String[] args) throws Exception {

        String readline = null;
        String inTemp = null;
        // String outTemp = null;
        String turnLine = "\n";
        final String client = "Client:";
        final String server = "Server:";

        int port = 4000;
        byte ipAddressTemp[] = { 127, 0, 0, 1 };
        InetAddress ipAddress = InetAddress.getByAddress(ipAddressTemp);

        // 首先直接创建socket,端口号1~1023为系统保存,一般设在1023之外
        Socket socket = new Socket(ipAddress, port);

        // 创建三个流,系统输入流BufferedReader systemIn,socket输入流BufferedReader
        // socketIn,socket输出流PrintWriter socketOut;
        BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter socketOut = new PrintWriter(socket.getOutputStream());

        while (readline != "bye") {

            System.out.println(client);
            readline = systemIn.readLine();
            // System.out.println(readline);

            socketOut.println(readline);
            socketOut.flush(); // 赶快刷新使Server收到,也可以换成socketOut.println(readline, ture)

            // outTemp = readline;
            inTemp = socketIn.readLine();

            // System.out.println(client + outTemp);
            System.out.println(server + turnLine + inTemp);

        }

        systemIn.close();
        socketIn.close();
        socketOut.close();
        socket.close();

    }

}

Server

import java.io.*;
import java.net.*;

public class Server {

    public static void main(String[] args) throws Exception {
        // TODO 自动生成的方法存根

        String readline = null;
        String inTemp = null;
        // String outTemp = null;
        String turnLine = "\n";
        final String client = "Client:";
        final String server = "Server:";

        int port = 4000;
        // byte ipAddressTemp[] = {127, 0, 0, 1};
        // InetAddress ipAddress = InetAddress.getByAddress(ipAddressTemp);

        // 首先直接创建serversocket
        ServerSocket serverSocket = new ServerSocket(port);
        // 调用服务器的accept()进行阻塞(程序会在这等待),当有申请连接时会打开阻塞并返回一个socket
        Socket socket = serverSocket.accept();

        // 创建三个流,系统输入流BufferedReader systemIn,socket输入流BufferedReader
        // socketIn,socket输出流PrintWriter socketOut;
        BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter socketOut = new PrintWriter(socket.getOutputStream());

        while (readline != "bye") {

            inTemp = socketIn.readLine();
            System.out.println(client + turnLine + inTemp);
            System.out.println(server);

            readline = systemIn.readLine();

            socketOut.println(readline);
            socketOut.flush(); // 赶快刷新使Client收到,也可以换成socketOut.println(readline, ture)

            // outTemp = readline;

            // System.out.println(server);

        }

        systemIn.close();
        socketIn.close();
        socketOut.close();
        socket.close();
        serverSocket.close();

    }

}

流程上需要先启动Server然后再启动Client,否则Client找不到目标,会报错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值