Java Socket使用

该文章演示了如何在Java中使用Socket进行简单的服务器和客户端通信。服务端创建ServerSocket监听特定端口,接受客户端连接,读取并打印接收到的数据。客户端通过Socket连接服务器,发送数据后关闭输出流。涉及的关键API包括ServerSocket的构造方法和Socket的accept、getInputStream、getOutputStream等。

步骤:

导包
api介绍
示例
结果

导包

新建工程,一路next,jdk1.8,命令行。hello,world没问题。
在这里插入图片描述
新建java文件,和类名一样。

服务端

package socket.socket1.socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketTest {
public static void main(String[] args) {
try {
// 初始化服务端socket并且绑定9999端口
            ServerSocket serverSocket  =new ServerSocket(6666);
            //等待客户端的连接
            Socket socket = serverSocket.accept();
            //获取输入流
            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
           //读取一行数据
           String str = bufferedReader.readLine();
            //输出打印
            System.out.println(str);
        }catch (IOException e) {
e.printStackTrace();
        }

}

}

telnet测试
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
Linux下的socket需要选地址,bind,listen,accept阻塞,recv
这里默认省略bind和listen。
保留accept阻塞。
recv变成read。这里readline是要读到\n才是跳出的标志。客户端也是要对应给换行,则server会结束服务。

关键API:
new ServerSocket(6666);
Socket socket = serverSocket.accept();
new InputStreamReader(socket.getInputStream())

ServerSocket serverSocket = new ServerSocket();

ServerSocket();//无参数

ServerSocket(int port);//指定端口

ServerSocket(int port,int backlog);//指定端口、队列数

ServerSocket(int port,int backlog,InetAddress bindAddr);//指定端口、队列数、绑定IP同主机的使用:

serverSocket.bind(SocketAddress endpoint);//指定端口

serverSocket.bind(SocketAddress endpoint,int backlog)//指定端口、队列数

客户端

package com.company;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ClientSocket {
    public static void main(String[] args) {
        try {
            Socket socket =new Socket("127.0.0.1",6666);
            BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            String str="socket";
            bufferedWriter.write(str);
            bufferedWriter.flush();
           socket.shutdownOutput();
        }catch (IOException e) {
            e.printStackTrace();
        }

    }

}

socket.shutdownOutput();//相当于FIN标志发送,第一次挥手。close则是不等回消息了,shutdown还可以收消息。

客户端不结束快
Thread.sleep(20000);
System.out.println(“delay”);

运行了close后,再改回来,删掉close也不报错了。有点奇怪的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值