Java的网络编程实现对话(TCP)学习笔记

本文介绍了Java中的TCP网络编程基础知识,包括套接字、IP地址、端口号、协议的概念,以及TCP的三次握手过程。此外,还讲解了TCP客户端和服务器的代码实践,涉及到IO流和线程的应用。
摘要由CSDN通过智能技术生成

(一)基础知识

1.定义:

通过套接字来达到进程间通信的目的
通俗来说就是让两个程序联系起来

2.IP:

(1)是一个逻辑地址,是可以修改的,但Mac地址是物理层面的,不可以被修改,是唯一的。
(2)一般来说是唯一的,但在不同的局域网中,两台电脑的IP地址可以一样,在这里,其实只是名称 相同而已。类似于人id,不同的学校的人id可能一样,但他们的学校是不同的。

3.端口号:

eg:QQ,浏览器,百度云三个软件都在运行网络程序,当电脑接受到网络发过来的数据之后,怎么知道要发给哪一个软件呢?
所以给三个软件分配唯一的一个号码,跟接受的数据包含的号码进行匹配,这个号码就是端口号。
端口号现在的范围是0~65535。一般我们自己编程的时候不使用1024以下太小的端口号,因为这些端口号,系统很多程序很有可能在使用。

4.协议:

由于网络传输是很复杂的一个工程,而且又是一个交互的工程。就像一个市场贸易,就得规定好价格。所以人们就提出了协议。协议是通信双方为了实现通信而设计的约定或通话规则。解决数据如何在网络中传输。

常见协议有:
(1)UDP:是无连接,不可靠的。类似于写信
(2)TCP:是面向连接的,可靠的。类似于打电话

TCP的三次握手:
在这里插入图片描述
共有四次消息的发送
1.客户端发送请求给服务器
2.服务器发送消息告诉客户端已经连接成功
(这里为什么服务器要发送连接成功给客户端呢?因为客户端还不知道服务器有没有收到请求)
3.服务器再次发送消息询问客户端
(这里为什么要再次发送呢?因为为了排除延迟的情况,客户端发送给服务器的请求,可能会收到某些故障,在网络节点中滞留了导致延迟,所以是一个失效的报文)
4.客户端应答服务器

5.套接字(socket)

套接字就是两台主机之间逻辑连接的端点
本质上就是一组接口,对协议的封装和应用

TCP客户端:一旦new出了Socket对象,该对象就会自动向服务器发送连接请求,如果连接不成功,程序就会立刻停止

TCP服务器:new出的ServerSocket对象不会自动监听客户端 的请求,要调用accept方法,才会监听。

(二)代码实践

1.相关知识:

(1)io流:程序与设备进行数据传输的类,或者说是一个管道。
主要利用了输入流InputStream,输出流OutputStream及其子类进行实现。

(2)线程:是一个程序运行时的不同执行路径。
主要是继承Thread这个类,再重写其run方法,用start来调用

2.代码:
服务器:

import java.io.*;
import java.net.*;

public class TCP_Server {
   

	public static void main(String[] args) throws Exception {
   
		ServerSocket ss = new ServerSocket(6666);  //这里并不会自动监听客户端有没有发数据过来
		Socket s = ss.accept();		//accpet方法监听客户端有没有发数据过来
									//有阻塞作用,如果没有接受到数据,就不会执行下面的代码
		
		DataInputStream dis = new DataInputStream(s.getInputStream());   //getInputStream是套接字的方法,返回一个输入流InputStream,这个InputStream被DataInputStream包裹创建一个对象dis
		DataOutputStream dos = new DataOutputStream(s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值