标签:JAVA Socket 编程 网络 TCP IP地址 new null 客户端
JAVA 网络编程基础
一,前言
了解计算机网络的概述,掌握Sokcet类编程,ServerSocket类,Socket类的构造方法和常用方法
二,计算机网咯
1.概述
计算机网络计算机们组成的网络,同一个网络中,计算机可以直接通信,因为计算机都需遵循同一种网络协议。
互联网是网络的网络(internet),即把很多计算机网络连接起来,形成一个全球统一的互联网。
某个计算机网络,可能使用网络协议ABC,而另一个可能使用网络协议XYZ。如通讯协议不统一,则无法连接形成互联网。统一使用TCP/IP协议。
TCP/IP协议:
泛指互联网协议,其中最重要的两个协议是TCP协议和IP协议。只有使用TCP/IP协议的计算机才能够联入互联网,使用其他网络协议(例如NetBIOS、AppleTalk协议等)是无法联入互联网的。
2.IP地址
在互联网中,一个IP地址用于唯一标识一个网络接口(Network Interface)。一台联入互联网的计算机至少有一个IP地址,或多个IP地址。
IP地址分为IPv4和IPv6两种。
- IPv4
IPv4采用32位地址,类似101.202.99.12,IPv4地址总共有232个(大约42亿),IPv4的地址目前已耗尽。
- IPv6
而IPv6采用128位地址,类似2001:0DA8:100A:0000:0000:1020:F2F3:1428,IPv6地址则总共有2128个(大约340万亿亿亿亿),而IPv6的地址是根本用不完的。
有一个特殊的IP地址,称之为本机地址,它总是:127.0.0.1(localhost)。
3.域名
直接记忆IP地址困难,通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP,客户端再根据IP地址访问服务器。
在cmd中用nslookup可以查看域名对应的IP地址
有一个特殊的本机域名localhost
4.常用协议
TCP协议:
是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。
UDP协议(User Datagram Protocol):
是一种数据报文协议,它是无连接协议,不保证可靠传输。
三,TCP编程
在开发网络应用程序的时候,我们又会遇到Socket这个概念。
Socket、TCP和部分IP的功能都是由操作系统提供的,不同的编程语言只是提供了对操作系统调用的简单的封装。
Socket就是由IP地址和端口号(范围是0~65535)组成,可以把Socket简单理解为IP地址加端口号。
端口号由操作系统分配,特权端口(小于1024)需管理员权限,普通端口(大于1024)任意用户的应用程序打开。
比如mysql端口: 127.0.0.1:3306
四,Socket编程
Java提供的网络类库(java.net),可以实现无缝的网络连接
使用Socket进行网络编程时,本质上就是两个进程之间的网络通信。
一个进程服务器端,它会主动监听某个指定的端口。一个客户端,它必须主动连接服务器的IP地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个TCP连接,双方后续就可以随时发送和接收数据。
1.ServerSocket类
构造方法:
//创建绑定到指定端口的服务器套接字。
ServerSocket(int port)
常用方法:
Socket accept() throws IOException
//等待客户端的连接请求,返回与该客户端进行通信用的Socket对象
void setSoTimeout(int timeout) throws SocketException
//设置accept()方法等待连接的时间为timeout毫秒。若时间已到,还没有客户端连接,则抛出InterruptedIOException异常,accept()方法不再阻塞,该倾听Socket可继续使用。若timeout值为0,则表示accept()永远等待。该方法必须在倾听Socket创建后,在accept()之前调用才有效。
void close()throws IOException
//关闭监听Socket
InetAddress getInetAddress()
//返回此服务器套接字的本地地址
int getLocalPort()
//返回此套接字在其上监听的端口号
SocketAddress getLocalSocketAddress()
//返回此套接字绑定的端点的地址
2.sokect类
构造方法:
//创建流套接字并将其连接到指定IP地址的指定端口号。
Socket(InetAddress address, int port)
常用方法:
InetAddress getLocalAddress()
//返回对方Socket中的IP的InetAddress对象
int getLocalPort()
//返回本地Socket中的端口号
InetAddress getInetAddress()
//返回对方Socket中IP地址
int getPort()
//返回对方Socket中的端口号
void close() throws IOException
//关闭Socket,释放资源
InputStream getInputStream() throws IOException
//获取与Socket相关联的字节输入流,用于从Socket中读数据。
OutputStream getOutputStream() throws IOException
//获取与Socket相关联的字节输出流,用于向Socket中写数据。
五,Socket实现客户端和服务端通讯
例:
- 服务端代码
public class FuWuDuan {
public static void main(String[] args) {
ServerSocket ss = null;
Socket s = null;
InputStream is = null;
OutputStream os = null;
Scanner sc = null;
try {
ss = new ServerSocket(1314);
sc= new Scanner(System.in);
while (true) {
//创建监听,接受客服端请求
s = ss.accept();
is = s.getInputStream();
//读写客户端的请求
byte b[] = new byte[1024];
is.read(b);
System.out.println("服务端收到:"+new String(b));
//输出请求,发生客户端
os = s.getOutputStream();
System.out.println("服务端请发出:");
String str = sc.next();
byte b1[] = str.getBytes();
os.write(b1);
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关流
}
}
}
- 客户端代码
public static void main(String[] args) {
Socket s = null;
OutputStream os = null;
Scanner sc = null;
InputStream is = null;
+
try {
//创建连接,连接服务端
sc= new Scanner(System.in);
while (true) {
s = new Socket("192.168.2.88", 1314);
//输出请求,发生服务端
os = s.getOutputStream();
System.out.println("客服端请发出:");
String str = sc.next();
byte b[] = str.getBytes();
os.write(b);
os.flush();
is = s.getInputStream();
//读写服务端的请求
byte b1[] = new byte[1024];
is.read(b);
System.out.println("客服端收到:"+new String(b));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关流
}
}
}
标签:JAVA,Socket,编程,网络,TCP,IP地址,new,null,客户端 来源: https://www.cnblogs.com/simashun/p/16175763.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。