需要用到io流,字节流,字符流,比如客户端写入数据,另一个服务器端取出数据
一个是客户端一个是服务器端,需要同时兼顾两个界面,
package API;import java.io.*; import java.net.InetAddress; import java.net.Socket;public class SocketTCP03Client {public static void main(String[] args) throws Exception { /* 客户端!!! 使用字符流 难点::有客户端和服务端两头有考虑 1. 链接服务器(ip,端口) 连接这台主机的9999端口,如果连接成功,返回socket对象*/Socket socket = new Socket(InetAddress.getLocalHost(),9999);System.out.println("客户端socket 阿翔连接成功~,运行类型="+socket.getClass());OutputStream outputStream = socket.getOutputStream();//得到和socket对象关联的输出流对象BufferedWriter bufferedReader = new BufferedWriter(new OutputStreamWriter(outputStream)); bufferedReader.write("hello server! 字符流");// 字节转字符bufferedReader.newLine();//插入一个换行符表示写入内容结束 注意 要求对方使用ReadLinbufferedReader.flush();//如果使用字符流需要手动刷新 否则数据不会写入数据通道/*设置写入结束标记*/ /*关闭流对象和socket对象*/System.out.println("客户端阿翔退出啦"); //获取和socket关联的输入流,读取数据 ,显示InputStream inputStream = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));String s = br.readLine();System.out.println("读取 的= "+ s );br.close();//关闭这个外层留即可bufferedReader.close();socket.close();} }
package API;import java.io.*; import java.net.ServerSocket; import java.net.Socket;//服务器端!!! public class SocketTCP03Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端大熊在9999端口监听, 等待阿翔链接~");Socket socket = serverSocket.accept();InputStream inputStream = socket.getInputStream();//IO读取,使用字符流读取,我使用转换流 ,将inputStream流转为字符流BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String s = bufferedReader.readLine();System.out.println("内容= "+ s ); // 获取socket相关联的输出流OutputStream outputStream = socket.getOutputStream();//使用字符输出流 写BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("hello client 字符流");bufferedWriter.newLine();//插入一个换行符,表示回复内的结束bufferedWriter.flush();//刷新/*设置写入结束标记 bufferedWriter.newLine();*/bufferedWriter.close();bufferedReader.close();//既然转换了, 那原先的两个对象的流就不需要关了socket.close();serverSocket.close();System.out.println("已写入");} }