package Internet;import org.junit.Test;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;/*
实现TCP网络编程*/
public class TCPTest {// 客户端@Testpublic void client() throws IOException {Socket socket = null;OutputStream os = null;try {InetAddress inet = InetAddress.getByName("192.168.1.104");socket = new Socket(inet,8899);os = socket.getOutputStream();os.write("你好呀我是客户端gg".getBytes());} catch (IOException e) {e.printStackTrace();} finally {// 资源关闭if (os != null){os.close();}if (socket != null){socket.close();}}}// 服务端@Testpublic void server() throws IOException {ServerSocket ss = null;Socket socket = null;InputStream is = null;ByteArrayOutputStream baos = null;try {ss = new ServerSocket(8899);socket = ss.accept();is = socket.getInputStream();// 若构建的数组太小,可能会有乱码
// byte[] buffer = new byte[1024];
// int len;
// while ((len=is.read(buffer))!=-1){
// String str = new String(buffer,0,len);
// System.out.println(str);
// }// 在 baos中有一个可扩容的数组,会自动存取所有字符baos = new ByteArrayOutputStream();byte[] buffer = new byte[5];int len ;while ((len = is.read(buffer))!=-1){baos.write(buffer,0,len);}System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();} finally {if(baos!=null){baos.close();}if(is!=null){is.close();}if(socket!=null){socket.close();}if(ss!=null){ss.close();}}}
}
二:
package Internet;import org.junit.Test;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class TCPTest2 {@Testpublic void client() throws IOException {
// 1.Socket socket = new Socket("127.0.0.1",8080);
// 2.OutputStream os = socket.getOutputStream();
// 3.FileInputStream fis = new FileInputStream(new File("1.jpg"));
// 4.byte[] buffer = new byte[5];int len ;while ((len = fis.read(buffer))!=-1){os.write(buffer,0,len);}
// 5.fis.close();os.close();socket.close();}@Testpublic void server() throws IOException {ServerSocket ss = new ServerSocket(8080);Socket socket = ss.accept();InputStream is = socket.getInputStream();FileOutputStream fos = new FileOutputStream(new File("2.jpg"));byte[] buffer = new byte[5];int len ;while ((len = is.read(buffer))!=-1){fos.write(buffer,0,len);}fos.close();is.close();socket.close();ss.close();}
}
三:
package Internet;import org.junit.Test;import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;/*
从客户端发送文件给服务端,服务端保存到本地。并返回”发送成功“给客户端*/
public class TCPTest3 {@Testpublic void client() throws IOException {
// 1.Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),8080);
// 2.OutputStream os = socket.getOutputStream();
// 3.FileInputStream fis = new FileInputStream(new File("1.jpg"));
// 4.byte[] buffer = new byte[5];int len ;while ((len = fis.read(buffer))!=-1){os.write(buffer,0,len);}
// 图片传完了不在输出数据socket.shutdownOutput();// 5.接受服务器端的数据并显示到控制台上InputStream is = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer1 = new byte[5];int len1 ;while ((len = is.read(buffer1))!=-1){baos.write(buffer1,0,len);}System.out.println(baos.toString());// 6,fis.close();os.close();socket.close();is.close();baos.close();}@Testpublic void server() throws IOException {
// 1.ServerSocket ss = new ServerSocket(8080);
// 2.Socket socket = ss.accept();
// 3.InputStream is = socket.getInputStream();
// 4.FileOutputStream fos = new FileOutputStream(new File("3.jpg"));
// 5.byte[] buffer = new byte[5];int len ;
// 由于read时阻塞式的方法,没有明确告诉就不会结束循环。因此需要明确的指示结束(29行)while ((len = is.read(buffer))!=-1){fos.write(buffer,0,len);}// 6.服务器端给与客户端反馈OutputStream os = socket.getOutputStream();// 字符需要转换成字节流os.write("照片已收到!很漂亮!".getBytes());// 7.fos.close();is.close();socket.close();ss.close();}
}