客户端
package com.shujia.day20.tcpdemo2;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/*
1:建立客户端的Socket服务,并明确要连接的服务器。
2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
3:通过Socket对象的方法,可以获取这两个流
4:通过流的对象可以对数据进行传输
5:如果传输数据完毕,关闭资源
*/
public class ClientDemo1 {
public static void main(String[] args) throws Exception {
//Socket(String host, int port)
//创建流套接字并将其连接到指定主机上的指定端口号。
//创建客户端的Socket对象
Socket s = new Socket("192.168.28.254", 12345);
Scanner sc = new Scanner(System.in);
while (true){
System.out.print("输入要发送的内容:");
String info = sc.next();
//通过Socket对象获取通道中的输出流, 本质上就是字节输出流
OutputStream os = s.getOutputStream();
os.write(info.getBytes());
if("over".equals(info)){
break;
}
//获取通道中的输入流,用于接收服务端的反馈
InputStream inputStream = s.getInputStream();
byte[] bytes = new byte[2048];
int length = inputStream.read(bytes);
String info2 = new String(bytes, 0, length);
System.out.println(info2);
}
s.close();
}
}
服务端
package com.shujia.day20.tcpdemo2;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
1:建立服务器端的socket服务,需要一个端口
2:服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信
3:通过客户端的获取流对象的方法,读取数据或者写入数据
4:如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的
*/
public class ServerDemo1 {
public static void main(String[] args) throws Exception {
//创建服务端的Socket对象
//ServerSocket(int port)
//创建绑定到指定端口的服务器套接字。
ServerSocket ss = new ServerSocket(12345);
//调用服务器的ServerSocket的方法,监听客户端的连接,底层建立传输通道
Socket socket = ss.accept(); // 发生阻塞,等待客户端的连接
while (true) {
//获取通道中的输入流对象
InputStream is = socket.getInputStream();
byte[] bytes = new byte[2048];
int length = is.read(bytes);
String info = new String(bytes, 0, length);
if("over".equals(info)){
break;
}
System.out.println(info);
//获取通道输出流,给客户端一个反馈信息
OutputStream outputStream = socket.getOutputStream();
outputStream.write("服务器已收到!".getBytes());
}
//关闭与客户端的通道
socket.close();
}
}
标签:协议,java,String,tcp,new,import,客户端,Socket
From: https://www.cnblogs.com/qiwei-bigdata/p/18370248