Java网络通信学习(一)- Java Socket 编程

一. 创建通信服务端
  • 1.创建指定端口的通信socket对象 , 即 ServerSocket, 服务器就用这个端口监听从客户端发来的连接请求。
  • 2.调用ServerSocket的accept()方法 ,在等待连接期间造成阻塞,监听连接从端口上发来的连接请求
  • 3.利用accept()方法返回的客户端socket对象, 进行读写IO操作
  • 4.关闭资源
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * server
 *
 * @author xupengwei
 * @create 2017-07-05 下午2:29
 **/
public class Server {

    static Socket client;

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

        // 指定通信端口
        int port = 8080;

        // 创建通信服务端,指定绑定的端口, 并监听此端口
        ServerSocket serverSocket = new ServerSocket(port);

        // 调用accept()方法开始监听,等待客户端的连接
        client = serverSocket.accept();

        // 获取输入流,并读取客户端信息
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

        PrintWriter out = new PrintWriter(client.getOutputStream());

        StringBuffer sb = new StringBuffer();

        while (true) {

            String str = in.readLine();

            out.println("has receive");

            out.flush();

            sb.append(str + "\n");

            if (str.equals("end")) {
                break;
            }
        }

        System.out.println(sb.toString());

        client.close();
    }
}
二. 创建通信客户端
  • 1.以服务器的IP和端口实例化socket对象
  • 2.获取socket上的流, 把流封装进BufferedReader/PrintWriter的实例,以进行读写
  • 3.关闭资源
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

/**
 * client
 *
 * @author xupengwei
 * @create 2017-07-05 下午2:37
 **/
public class Client {

    static Socket server;

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

        // 获取本机本地地址
        InetAddress localHost = InetAddress.getLocalHost();

        // 端口
        int port = 8080;

        // 建立起连接服务断的socket, 指定服务器地址和端口
        server = new Socket(localHost, port);

        // 控制台输入流
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        // 往服务端写数据.将输出流包装成打印流
        PrintWriter out = new PrintWriter(server.getOutputStream());

        while (true) {

            // 若无输入,这里IO会阻塞。
            String str = in.readLine();

            out.println(str);

            out.flush();

            if (str.equals("end")) {
                break;
            }
        }

        in.close();
        out.close();
        server.close();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值