简单的说就是建立一个客户端和服务端,中间通过socket和流来连接传输数据,两者类似
客户端:
1 package TestTCP; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.net.InetAddress; 9 import java.net.Socket; 10 11 /** 12 * 客户端 13 * 14 * @author Administrator 15 * 16 */ 17 public class MyClient { 18 public static void main(String[] args) throws IOException { 19 // 打开一个接口,包含本机地址和端口号 20 Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 21 6666); 22 // 打开一个socket的输出通道用于向服务器传输数据 23 BufferedWriter sWriter = new BufferedWriter(new OutputStreamWriter( 24 socket.getOutputStream())); 25 // 打开一个输入通道用于接受用户输入数据 26 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 27 // 打开一个输入通道用于接受服务端反馈的数据 28 BufferedReader sReader = new BufferedReader(new InputStreamReader( 29 socket.getInputStream())); 30 // 开始通讯 31 String line = null; 32 while ((line = br.readLine()) != null) { 33 sWriter.write(line + "\r\n"); 34 sWriter.flush(); 35 36 line = sReader.readLine(); 37 System.out.println("服务端反馈的数据:" + line); 38 } 39 socket.close(); 40 } 41 }
服务端:
1 package TestTCP; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.net.ServerSocket; 9 import java.net.Socket; 10 11 /** 12 * 服务端 13 * 14 * @author Administrator 15 * 16 */ 17 public class MyServer { 18 public static void main(String[] args){ 19 try { 20 // 打开一个服务器接口 21 ServerSocket serverSocket = new ServerSocket(6666); 22 Socket socket = serverSocket.accept(); 23 // 打开输入流用于接受客户端的数据 24 BufferedReader sReader = new BufferedReader(new InputStreamReader( 25 socket.getInputStream())); 26 // 打开输出流用户向客户端反馈数据 27 BufferedWriter sWriter = new BufferedWriter(new OutputStreamWriter( 28 socket.getOutputStream())); 29 // 打开一个输入流用于接受自己输入的数据 30 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 31 String line = null; 32 while ((line = sReader.readLine()) != null) { 33 System.out.println(socket.getInetAddress().getHostAddress() + "发送:" 34 + line); 35 line = br.readLine(); 36 sWriter.write(line + "\r\n"); 37 sWriter.flush(); 38 } 39 socket.close(); 40 } catch (IOException e) { 41 System.out.println("结束会话!..."); 42 // e.printStackTrace(); 43 } 44 } 45 }
其中要注意点:
1、就是使用readline的时候,返回值是不包含"\r\n"的,我们在输出的时候要加上,不然对方会卡在readline的地方,因为他找不到终点(也就是"\r\n");
2、使用缓冲流的输出的时候,数据会存在缓冲数组中 需要flush一下。。。