Java使用TCP实现数据传输实例详解
Java使用TCP实现数据传输实例详解
TCP所提供服务的主要特点:
1.面向连接的传输;
2.端到端的通信;
3.高可靠性,确保传输数据的正确性,不出现丢失或乱序;
4.全双工方式传输;
5.采用字节流方式,即以字节为单位传输字节序列;
6.紧急数据传送功能。
TCP传输需要建立客户端和服务器端,即Socket和ServerSocket,建立连接后,通过Socket中的IO流进行数据的传输。传输结束后关闭Socket。
客户端和服务器端是两个独立的应用程序。
以下是实现基本的TCP数据传输的Democode:
packagejavase.day18; importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.InputStreamReader; importjava.io.OutputStreamWriter; importjava.net.ServerSocket; importjava.net.Socket; publicclassTransTextDemo{ publicstaticvoidmain(String[]args){ } } classTcpClient2{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("clientstart..."); Sockets=newSocket("192.168.1.2",10005); BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(s.getOutputStream())); StringsendDataStr=null; while((sendDataStr=br.readLine())!=null){ if(sendDataStr.equals("bye")){ break; } bw.write(sendDataStr); bw.newLine(); bw.flush(); } bw.close(); } } classTcpServer2{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("serverstart..."); ServerSocketss=newServerSocket(10005); Sockets=ss.accept(); BufferedReaderbr=newBufferedReader(newInputStreamReader(s.getInputStream())); BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(s.getOutputStream())); StringreceiveDataStr=null; while((receiveDataStr=br.readLine())!=null){ if(receiveDataStr.equals("bye")){ break; } System.out.println("receivedata:"+receiveDataStr); } } }
使用TCP实现文本文件上传的Democode:
packagejavase.day18; importjava.io.BufferedReader; importjava.io.FileReader; importjava.io.FileWriter; importjava.io.InputStreamReader; importjava.io.OutputStreamWriter; importjava.io.PrintWriter; importjava.net.ServerSocket; importjava.net.Socket; publicclassUploadText{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub } } classTextServer{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("Serverstart..."); ServerSocketss=newServerSocket(10008); Sockets=ss.accept(); BufferedReaderbr=newBufferedReader(newInputStreamReader(s.getInputStream())); PrintWriterout=newPrintWriter(newFileWriter("C:\\java_test\\server.txt"),true); Stringline=null; while((line=br.readLine())!=null){ System.out.println(line); out.println(line); } PrintWriterpw=newPrintWriter(newOutputStreamWriter(s.getOutputStream()),true); pw.println("uploadsuccessful"); pw.close(); s.close(); ss.close(); } } classTextClient{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("Clientstart..."); SocketclientSocket=newSocket("192.168.1.2",10008); BufferedReaderbr=newBufferedReader(newFileReader("C:\\java_test\\SystemDemo.java")); PrintWriterout=newPrintWriter(clientSocket.getOutputStream(),true); Stringline=null; while((line=br.readLine())!=null){ System.out.println(line); out.println(line); } clientSocket.shutdownOutput(); BufferedReaderbr2=newBufferedReader(newInputStreamReader(clientSocket.getInputStream())); StringconfirmMsgStr=br2.readLine(); System.out.println(confirmMsgStr); br2.close(); clientSocket.close(); } }
实现图片上传的Democode:
packagejavase.day18; importjava.io.BufferedInputStream; importjava.io.BufferedOutputStream; importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.net.ServerSocket; importjava.net.Socket; publicclassUploadImage{ publicstaticvoidmain(String[]args){ } } classImageClient{ publicstaticvoidmain(String[]args)throwsException{ SocketimageClientSocket=newSocket("192.168.1.2",10010); BufferedInputStreambis=newBufferedInputStream(newFileInputStream("C:\\java_test\\client\\生活用品01.jpg")); BufferedOutputStreambos=newBufferedOutputStream(imageClientSocket.getOutputStream()); byte[]buf=newbyte[1024*100]; intlen=0; while((len=bis.read(buf))!=-1){ bos.write(buf,0,len); } imageClientSocket.shutdownOutput(); BufferedInputStreambis2=newBufferedInputStream(imageClientSocket.getInputStream()); byte[]buf2=newbyte[1024]; intlen2=0; while((len2=bis2.read(buf2))!=-1){ System.out.println(newString(buf2,0,len2)); } bis.close(); imageClientSocket.close(); } } classImageServer{ publicstaticvoidmain(String[]args)throwsException{ ServerSocketss=newServerSocket(10010); Sockets=ss.accept(); BufferedInputStreambis=newBufferedInputStream(s.getInputStream()); BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("C:\\java_test\\server\\生活用品01.jpg")); byte[]buf=newbyte[1024*100]; intlen=0; while((len=bis.read(buf))!=-1){ bos.write(buf,0,len); } BufferedOutputStreambos2=newBufferedOutputStream(s.getOutputStream()); bos2.write("uploadsuccessful".getBytes()); bos2.close(); s.close(); ss.close(); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!