字符流输出时如果用os.wirte输出,接受端要只能用字节流接受
字符流输出时如果用os.println输出,接受端可用字节流接受,也可用字符流接受
os.println()只能输出字符或者字符串,如果是字节,接受端解析不出来
is.readLine(),是字符输出流独有的,直接输出内容,直接输出流没有此方法
new String(Byte[]),接受字节流的数据读取,与byte[] byteData = new byte[1024 * 1024]一起使用;
接受流都用缓存流来接受:
输入字符缓存流:BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
输入字节缓存流:BufferedInputStream reader = new BufferedInputStream(socket.getInputStream());
输出字符缓存流:PrintWriter pw = new PrintWriter(socket.getOutputStream());
输出字节缓存流:PrintStream pw = new PrintStream(socket.getOutputStream());
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;public class TcpServer{public static void main(String[] args) {try {//创建一个serverSocket监听一个8080端口ServerSocket server = new ServerSocket(8089);//等待请求Socket socket = server.accept();//接收到请求后使用socket通信BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line = reader.readLine();System.out.println("收到客户端信息:" + line);//向客户端发送信息PrintWriter pw = new PrintWriter(socket.getOutputStream());pw.println("我收到了信息:" + line);pw.flush();pw.close();reader.close();socket.close();server.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
import java.io.*;
import java.net.Socket;public class TcpClient {public static void main(String[] args) {String msg = "我是客户端";try {Socket cli = new Socket("127.0.0.1", 8089);PrintWriter pw = new PrintWriter(cli.getOutputStream());BufferedReader br = new BufferedReader(new InputStreamReader(cli.getInputStream()));pw.println(msg);pw.flush();String line = br.readLine();System.out.println("收到服务端信息:" + line);pw.close();br.close();cli.close();} catch (Exception e) {e.printStackTrace();}}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class MyClass {public static void main(String[] args) {try {//创建一个serverSocket监听一个8080端口ServerSocket server = new ServerSocket(8089);//等待请求Socket socket = server.accept();byte[] byteData = new byte[1024 * 1024];//接收到请求后使用socket通信BufferedInputStream reader = new BufferedInputStream(socket.getInputStream());int line = reader.read(byteData);System.out.println("收到客户端信息:" + new String(byteData));//向客户端发送信息PrintStream pw = new PrintStream(socket.getOutputStream());String out="我收到了信息:";pw.write(out.getBytes());pw.flush();pw.close();reader.close();socket.close();server.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
import java.io.*;
import java.net.Socket;public class TcpClient {public static void main(String[] args) {String msg = "我是客户端";try {Socket cli = new Socket("127.0.0.1", 8089);byte[] byteData = new byte[1024 * 1024];PrintStream pw = new PrintStream(cli.getOutputStream());BufferedInputStream br = new BufferedInputStream(cli.getInputStream());pw.write(msg.getBytes());pw.flush();int line = br.read(byteData);System.out.println("收到服务端信息:" + new String(byteData));pw.close();br.close();cli.close();} catch (Exception e) {e.printStackTrace();}}
}