android socket io和服务器_JAVA客户端&服务器的socket通信

JAVA客户端&服务器的socket通信

socket是两台主机之间的一个连接通道,它可以完成七个基本操作:

  1. 发送远程机器
  2. 发送数据
  3. 接收数据
  4. 关闭连接
  5. 绑定端口
  6. 监听入站数据
  7. 再绑定端口上接收来自远程机器的连接

在客户端上使用socket

  1. 程序用构造函数创建一个新的socket
  2. socket尝试连接远程服务器

用socket从服务器读取

Socket socket = new Socket("http://www.baidu.com",13);

创建一个连接,如果连接超时,或者服务器未在端口上,那么就设置一个超时时间,超时时间按照毫秒值度量

socket.setSoTimeout(15000);   //设置socket在15秒无响应后超时

sever socket就是服务端用来检测客户端是否使用socket发起请求了,如果有,就从中拿到客户端的请求数据,再将响应数据写入socket,这其中写入数据设计I/O流操作

基本的客户端和服务器之间的socket通信

客户端:

package com.example.socketdome.javasocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class Client {


    public static void main(String[] args) {
        Socket socket;

        {
            try {
                //创建socket通道,传入IP地址和服务器的端口号
                socket = new Socket(InetAddress.getLocalHost(),2121);
                //通过print writer发送数据给服务器,bufferedreader读取数据
                PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //发送数据
                String request ="你收到我的消息了吗?";
                //写入数据
                printWriter.println(request);
                //发送
                printWriter.flush();
                //接收服务器的响应数据
                String respose =bufferedReader.readLine();
                System.out.println("服务器:"+respose);
                //关闭资源
                socket.close();
                bufferedReader.close();
                printWriter.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务器:

package com.example.socketdome.javasocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //创建服务器对象,传入端口
        ServerSocket serverSocket = new ServerSocket(2121);
        //新建socket对象,等待客户端连接,调用socket的accept方法监听客户端的请求,该方法是阻塞方法,就在这等着
        Socket socket  =serverSocket.accept();
        //创建Bufferdreader,接收客户端的信息,数据流对象就是socket
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //读取客户端的请求信息
        String requestData = bufferedReader.readLine();
        System.out.println("客户端:"+requestData);
        //创建Printwriter发送服务器响应信息,接受的数据流也来自socket
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
        //写入响应数据
        printWriter.println("收到了,老铁");
        //发送信息
        printWriter.flush();
        //关闭资源
        bufferedReader.close();
        socket.close();
        printWriter.close();
        serverSocket.close();
    }
}

运行结果

客户端:

3e78dacf6d4d9265f1ef0c65a34d094c.png

服务器:

b6c7fc19c61f83d028efc201a0560554.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值