Socket(套接字/插座):
Socket是为网络服务提供的一种机制;通信的两端都有Socket;网络通信其实就是Socket间的通信;数据在两个Socket间通过IO传输。 (可以把Socket理解为码头,由船进行装货卸货来实现码头间数据的传输)。 PS:Socket网络编程主要掌握其流程,代码查文档即可。
同时,在学习网络编程时,必须重点掌握理解两个传输协议:UDP和TCP
UDP(用户数据报协议):将数据及源和目的地址封装成数据包,不需要建立连接(即:面向无连接);每个数据报的大小限制在64k内;因无连接,是不可靠协议;不需要连接地址,速度快。 如:网络聊天、网络视频、桌面共享都可以利用UDP传输
TCP(传输控制协议):建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。 如:电话通话、下载
下面通过代码进行举例说明:
要求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
客户端: 1,建立socket服务,指定要连接主机和端口。
2,获取socket流中的输出流,将数据写到该流中,通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
import java.io.*;
import java.net.*;
class TcpClient2 {
public static void main(String[] args)throws Exception {
Socket s = new Socket("localhost",10004);
OutputStream out = s.getOutputStream();
out.write("服务端,你好".getBytes());
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
}
class TcpServer2{
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(10004);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected");
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
OutputStream out = s.getOutputStream();
Thread.sleep(10000);
out.write("哥们收到,你也好".getBytes());
s.close();
ss.close();
}
}
想了解更多关于Socket网络编程的知识,可以看看毕向东老师关于Java讲解的第23天内容!
希望我的解答能对你有所帮助!
|