IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 基于TCP/IP在同一局域网下的数据传输 -> 正文阅读

[系统运维]基于TCP/IP在同一局域网下的数据传输

1.TCP/IP网络编程

? ? 在开发网络应用程序的时候,会遇到Socket这个概念。一个应用程序通过一个Socket来建立远程连接,而Socket内部通过TCP/IP协议把数据传输到网络。

? ? TCP/IP是传输控制协议和网络协议的简称,它定义设备如何连入因特网,以及数据如何在他们之间传输的标准。TCP/IP不是一个协议,而是一个协议族的统称,里面包括了IP协议、ICMP协议、TCP协议、以及http、ftp、pop3协议等,网络计算机都采用这套协议族进行互联。

2.数据传输

? 使用Socket进行网络编程时,本质上就是进行俩个进程之间的网络通信。其中一个进程必须充当服务器端,它会主动去监听某个指定位置的端口,列一个必须充当客户端,它必须主动与连接服务器端的IP地址和指定端口,如果连接成功,服务器端与客户端就成功的建立了一个TCP协议,双方后续就可以随时发送和接收数据。

? 对服务器端来说,它的Socket是指定的IP地址和指定的端口号。

? 对客户端来说,它的Socket是它所在的计算机的IP地址和一个操作系统分配的随机端口号。

3.服务器端

Java标准库提供了ServerSocket来实现对指定IP的指定端口的监听。实现程序如下:

public class Server {
    public static void main(String[] args) throws IOException {

        ServerSocket ss = new ServerSocket(6666); // 监听指定端口
        System.out.println("server is running...");
        //使用while循环来让服务器一直保持接收的状态
        while (true) {
            Socket sock = ss.accept();
            
            // 使用Socket流进行网络通信
            // ...
            
            System.out.println("connected from " + sock.getRemoteSocketAddress());
        }
    }
}

?需要注意的是:

(1)使用try-catch块来抛出异常

(2)使用while循环来让服务器一直保持接收状态。

(3)一定要指定服务器端的监听端口。

4.客户端

? ? ? 客户端通过如下代码来连接到服务器端,而且一定要指定服务器的端口,否则会无法正确的进行数据传输。

public class Client {
    public static void main(String[] args) throws IOException {
        // 连接指定服务器和端口
        Socket sock = new Socket("localhost", 6666); 
        
       // 使用Socket流进行网络通信
       // ...
        
        // 关闭
        sock.close();
        System.out.println("disconnected.");
    }
}

5.参考示例:(服务器·与客户端在同一局域网下的聊天)

服务器端:

public static void main(String[] args) {

		Scanner input = new Scanner(System.in);
		try (DatagramSocket socket = new DatagramSocket(8888)) {
			DatagramPacket sendPacket = new DatagramPacket(new byte[1024], 1024,
					new InetSocketAddress("192.168.254.177", 9999));
			DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);

			while (true) {

				socket.receive(receivePacket);
				String receiveContent = new String(receivePacket.getData(), receivePacket.getOffset(),
						receivePacket.getLength());
				if (receiveContent.equals("over")) {
					System.out.println("对方退出聊天......");
					break;
				}
				System.out.println("它说" + receiveContent);

				System.out.print("你说:");
				String sendContent = input.nextLine();
				sendPacket.setData(sendContent.getBytes());
				socket.send(sendPacket);
				if (sendContent.equals("over")) {
					System.out.println("你退出聊天...");
					return;
				}

			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

客户端:

public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		while(true) {
			
			
			try (Socket cilent = new Socket("192.168.254.159", 8888);
                
				 BufferedWriter writer = new BufferedWriter(new 
                     OutputStreamWriter(cilent.getOutputStream()));
				 BufferedReader reader = new BufferedReader(new 
                     InputStreamReader(cilent.getInputStream()))
				) {
				//获取控制台的输入
				String question = input.nextLine();
				if(question.equals("over")) {
					break;
				}

				// 发送消息至服务器
				writer.write(question);
				writer.flush();
				
				//暂时结束本次输出
				cilent.shutdownOutput();
				
				//获取来自服务器的回答
				String answer = reader.readLine();
				System.out.println("【客户端】来自服务器的回答" + answer);
				

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		System.out.println("本次聊天结束!!");
	}

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:20:33  更:2022-07-20 19:21:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 20:10:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码