基于TCP的网络编程-单向通信
基于TCP的网络编程-单向通信
网络通信原理-套接字
套接字
-
套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信 。
-
Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制 。
实际作用
Java网络编程功能分解-单向通信
- 功能:客户端发送一句话到服务器:
实现
- 客户端
package com.ruan.test02;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class TestClient {
public static void main(String[] args) throws IOException {
System.out.println("请输入信息");
Scanner scanner = new Scanner(System.in);
String next = scanner.nextLine();
//1.创建套接字:指定服务器的ip和端口
Socket socket = new Socket("192.168.15.1", 8888);
//2.对于程序员来说,向外发送数据直接使用输出流
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF(next);
//3.关闭流关闭网络资源
dataOutputStream.close();
outputStream.close();
socket.close();
}
}
- 服务端
package com.ruan.test02;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestService {
public static void main(String[] args) throws IOException {
//1.创建套接字,指定服务端口
ServerSocket serverSocket = new ServerSocket(8888);
//2.等待客户端发送信息
Socket accept = serverSocket.accept();//阻塞方法:等待接收客户端的数据,什么时候接收到数据,什么时候程序继续向下执行。返回值为socket
//3.对于程序员来说最直观的感受是输入流
InputStream inputStream = accept.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
//4.读取客户端发来的信息
String str = dataInputStream.readUTF();
System.out.println("客户端发来的消息是"+str);
//5.关闭流
inputStream.close();
dataInputStream.close();
accept.close();
serverSocket.close();
}
}
测试
- 先开启客户端还是先开启服务器:先开服务器,再开启客户端
- 侧面验证:先开客户端:出错:
- 侧面验证:先开客户端:出错: