socket的通信模型
(1)服务器端简历倾听socket(ServerSocket);
(2)客户端创建socket并向服务器端发送。
(3)服务器端接收socket,获取其中的流并进行处理。
服务器端:
package day812_1; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class TCPServer1 { public static void main(String[] args) throws IOException { //创建服务器套接字,并指定端口号 ServerSocket serverSocket = new ServerSocket(10010); //监听,并返回套接字 System.out.println("客户端运行中。。。。"); Socket socket = serverSocket.accept(); //获取输入流 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String s = br.readLine(); System.out.println("客户端说: "+s); bw.write("我知道了,谢谢您"); bw.newLine(); bw.flush(); br.close(); bw.close(); socket.close(); serverSocket.close(); } }
客户端:
package day812_1; import java.io.*; import java.net.Socket; public class TCPClient1 { public static void main(String[] args) throws IOException { Socket socket =new Socket("10.9.21.229",10010); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); bw.write("你好啊!银虫"); bw.newLine(); bw.flush(); System.out.println("服务器说"+br.readLine()); br.close(); bw.close(); socket.close(); } }
注意事项:
1、服务器与客户端的端口号必须保持一致。客户端中socket的地址为要传输的地址。
2、写入流写入的时候,最好要加换行的关键字进行修饰,其原因是入过读取完之后还需要进行其他操作的话,readline没有读到换行符将不会有返回值,而导致程序卡死,如果读取完之后立刻关闭资源的话不需要添加。
文件传输与普通io流传输差不多,附上代码:
FIleServer :
package day812_1; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class FIleServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(18810); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); FileOutputStream fio = new FileOutputStream("src\\day812_1\\a.png"); byte[] brr = new byte[1024]; int len = -1; while((len = inputStream.read(brr))!=-1){ fio.write(brr,0,len); fio.flush(); } fio.close(); inputStream.close(); socket.close(); serverSocket.close(); } }
==============================================================================================
FileClient : package day812_1; import java.io.*; import java.net.Socket; public class FileClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("10.9.21.229",8888); OutputStream os = socket.getOutputStream(); FileInputStream in = new FileInputStream("C:\\Users\\Administrator\\Pictures\\49.png"); byte[] byt = new byte[1024]; int len =-1; while ((len=in.read(byt))!=-1){ os.write(byt,0,len); os.flush(); } in.close(); os.close(); socket.close(); } }