知识点
Socket类
Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。
构造方法
public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指 定的host是null ,则相当于指定地址为回送地址。
小贴士:回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本 地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。
构造举例,代码如下:
Socket client = new Socket(“127.0.0.1”, 6666);
成员方法
public InputStream getInputStream() : 返回此套接字的输入流。
如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。
关闭生成的InputStream也将关闭相关的Socket。
public OutputStream getOutputStream() : 返回此套接字的输出流。
如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。
关闭生成的OutputStream也将关闭相关的Socket。
public void close() :关闭此套接字。
一旦一个socket被关闭,它不可再使用。
关闭此socket也将关闭相关的InputStream和OutputStream 。
public void shutdownOutput() : 禁用此套接字的输出流。
任何先前写出的数据将被发送,随后终止输出流。
ServerSocket类
ServerSocket 类:这个类实现了服务器套接字,该对象等待通过网络的请求。
构造方法
public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指 定的端口号上,参数port就是端口号。
构造举例,代码如下:
ServerSocket server = new ServerSocket(6666);
成员方法
public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法 会一直阻塞直到建立连接。
课堂实践
package Demo01Tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
// 客户端
public class TcpClient {
public static void main(String[] args) throws IOException {
// 1.创建一个客户端对象socket,构造方法中绑定服务器的ip地址和端口号
Socket socket = new Socket("127.0.0.1",8888);
// 2.使用outputstream获取输出流对象
OutputStream os = socket.getOutputStream();
// 3.使用write方法写数据
os.write("你好,服务器".getBytes());
//4.使用getinputstream 获取输入流
InputStream is = socket.getInputStream();
// 5.使用输入流的方法获取
byte[] bytes =new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
// 释放资源
socket.close();
}
}
package Demo01Tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
// 1.创建服务器ServerSocket 对象和系统要指定的端口号
ServerSocket server = new ServerSocket(8888); // 端口号
// 2.使用ServerSocket对象中的accept方法,获取到请求的客户端对象Socket
Socket socket = server.accept();
// 3.使用 对象中的getinputstream 获取网络中输入流对
InputStream is=socket.getInputStream();
// 4.使用网络输入流中的read方法,读取客户端发送的数据
byte[] bytes =new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
// 5.使用 对象中的 outputstream获取输出流
OutputStream os = socket.getOutputStream();
// 6.使用输出流中的 给客户端回写数据
os.write("收到数据,谢谢".getBytes());
//7.释放资源
socket.close();
server.close();
}
}
**2020080605036**