Socket套接字之TCP网络编程 单向 双向 对象流 异常处理 多线程

Socket套接字之TCP网络编程 单向 双向 对象流 异常处理套接字(Socket)用来描述IP地址和端口,是通信链的句柄,应用程序通过Socket向网络发送请求或者应答网络请求是支持TCP/IP协议的网络通信的基本操作单元,是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,内含五种信息:连接使用的协议,本机IP即进程接口PORT,远程主机IP及进程接口PORT。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下
摘要由CSDN通过智能技术生成

Socket套接字之TCP网络编程 单向 双向 对象流 异常处理

套接字(Socket)

  • 用来描述IP地址和端口,是通信链的句柄,应用程序通过Socket向网络发送请求或者应答网络请求
  • 是支持TCP/IP协议的网络通信的基本操作单元,
  • 是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,内含五种信息:连接使用的协议,本机IP即进程接口PORT,远程主机IP及进程接口PORT。
  • 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
  • 从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。

Socket示意图

Socket通讯模型

TCP网络编程

TCP有客户端可服务端,且地位不平等

客户端: Socket 程序感受到的 使用流–>输出流
服务器端: ServerrSocket —>Socket 程序感受到的 使用流<–输入流

接下来基于模拟通信,为了代码简便不处理异常而是直接抛出甩锅

单向通信

注意要先开服务器,再开启客户端

服务端
import java.io.*;
import java.net.ServerrSocket;
import java.net.Socket;

public class Server {
   
    public static void main(String[] args) throws IOException {
   
        //1.创建套接字: 指定服务的端口号
        ServerrSocket ss = new ServerrSocket(8888);
        //2.等着客户端发来的信息:
        /*阻塞方法:等待接收客户端的数据,什么时候接收到数据,什么时候程序继续向下执行。
        accept()返回值为一个Socket,这个Socket其实就是客户端的Socket
        接到这个Socket以后,客户端和服务器才真正产生了连接,才真正可以通信了*/
        Socket s = ss.accept();

        //3.感受到的操作流:
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);

        //4.读取客户端发来的数据:
        String str = dis.readUTF();
        System.out.println("客户端发来:"+str);

        //5.关闭流 关闭网络资源:
        dis.close();
        is.close();
        s.close();
        ss.close();
    }
}
客户端
import java.io.*;
import java.net.Socket;

public class Client {
   
    public static void main(String[] args) throws IOException {
   
        //1.创建Socket:指定服务器的IP和端口号:
        Socket s = new Socket("localhost",8888);

        //2.利用输出流向外发送数据
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        //利用这个OutputStream就可以向外发送数据了,但是没有直接发送String的方法
        //所以我们又在OutputStream外面套了一个处理流:DataOutputStream
        dos.writeUTF("Hello World");

        //3.关闭流 关闭网络资源:
        dos.close();
        os.close();
        s.close();
    }
}
通信情况
Server:
客户端发来的数据为:Hello World

双向通信

服务端
import java.io.*;
import java.net.ServerrSocket;
import java.net.Socket;

public class Server {
   
    public static void main(String[] args) throws IOException {
   
        //1.创建套接字: 指定服务器的端口号
        ServerrSocket ss = new ServerrSocket(8888);

        //2.等着客户端发来的信息,建立连接通信
        Socket s = ss.accept();

        //3.感受到的操作流:
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);

        //4.读取客户端发来的数据:
        String str = dis.readUTF();
        System.out.println("客户端发来:"+str);
        //向客户端回复一句话:-->操作流-->输出流
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF("Hello, I'm Server!");

        //5.关闭流 关闭网络资源:
        dos.close();
        os.close();
        dis.close();
        is.close();
        s.close();
        ss.close();
    }
}
客户端
import java.io.*;
import java.net.Socket;

public class Client {
   
    public static void main(String[] args) throws IOException {
   
        //1.创建套接字:指定服务器的IP和端口号:
        Socket</
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值