参考资料
极客视频教程
毕向东视频
Tcp连接过程,Client端以套接字Socket为载体,Server端以套接字ServerSocket为载体,Server端以Socket接收Client端传过来的信息。
socket编程连接建立过程:
服务器监听
客户端发出请求
建立连接
通信
两台计算机之间的使用套接字建立Tcp:
客户端建立过程:
- 创建tcp客户端socket服务,使用的是socket对象,对象创建之初就应该明白目的地;
- 如果连接成功,说明数据传输通道已建立;该通道就是Socket流,是底层建立好的,既然是流,就说明既有输出又有输入;想要输入或者输出对象,就要找Socket获取;可以通getOutputStream()和getInputStream()来获取两个字节流;
- . 使用输出流,将数据写出;
- 关闭资源。
服务端建立过程:
- 创建服务端Socket服务,通过ServerSocket对象;
- 服务端必须对外提供一个端口,否则客户端连接不上(监听);
- 获取连接过来的客户端对象;
- 通过客户端对象获取Socket流读取客户端发送过来的数据,并打印在客户端上;
- 关闭资源,先关客户端,再关服务端。(服务端只服务客户端一次)
代码示例过程:
client:
public class myClient {
public static void main(String [] args) {
//创建客户端对象,创建之初就明确目的地
Socket socket;
{
try {
socket = new Socket("127.0.0.1", 10004);
//获取socket的输出流
OutputStream outputStream = socket.getOutputStream();
//使用输出流将指定数据写出去
outputStream.write("客户端信息输出".getBytes());
//双向通信时,客户端就要读取服务端发过来的数据
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = inputStream.read(buf);
//接收服务端传过来的消息
String test = new String (buf,0,length);
System.out.println(test);
//关闭资源
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Server:
public class myServer {
public static void main(String [] args){
//创建服务端的对象
try {
ServerSocket serverSocket = new ServerSocket(10004);
//获取连接过来的客户端对象
Socket socket = serverSocket.accept();
String ip = socket.getInetAddress().getHostAddress();
//通过socket对象获取输入流,读取客户端发过来的数据
InputStream inputStream = socket.getInputStream();
//自定义缓冲
byte[] buff = new byte[1024];
int length = inputStream.read(buff);
String text = new String(buff,0,length);
System.out.println(ip+":"+text);
//使用客户端Socket对象输出流给客户端返回数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("服务端已收到".getBytes());
//关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}