java自定义tcp网络编程_Java网络编程-实现TCP的网络编程

案例一:服务器收到客户端发送的信息,并打印到控制台

客户端

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidclient02(){

Socket socket=null;//造一个数据输出流

DataOutputStream dos=null;try{//造一个Socket套接字

socket=new Socket("127.0.0.1",4433);//数据输出流的输出位置是 socket的输出流

dos=newDataOutputStream(socket.getOutputStream());//给服务器传送数据

for(int i=0;i<1024;i++)

{//使用数据输出流输出基本数据类型数据

dos.writeUTF("我是客户端,你好服务器\n");

}

}catch(IOException e) {

e.printStackTrace();

}finally{//关闭资源

if (dos != null) {try{

dos.close();

}catch(IOException e) {

e.printStackTrace();

}

}if (socket != null) {try{

socket.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

View Code

服务器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidserver02()

{try{

ServerSocket serverSocket=new ServerSocket(4433);while (true)

{

Socket client=serverSocket.accept();

InputStream is=client.getInputStream();intlen;byte [] bytes=new byte[5];//不建议这样写,可能会乱码

while ((len=is.read(bytes))!=-1)

{

String str=new String(bytes,0,len);

System.out.println(str);

}

}

}catch(IOException e) {

e.printStackTrace();

}

}

View Code

服务器不建议这样直接读取数据,可能会乱码

是�

�户�

��,�

�好�

��务

推荐写法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidserver02()

{try{

ServerSocket serverSocket=new ServerSocket(4433);while (true)

{

Socket client=serverSocket.accept();

InputStream is=client.getInputStream();intlen;byte [] bytes=new byte[5];

ByteArrayOutputStream bos=newByteArrayOutputStream();while ((len=is.read(bytes))!=-1)

{

bos.write(bytes,0,len);

}

String str=bos.toString();

System.out.println(str);

}

}catch(IOException e) {

e.printStackTrace();

}

}

View Code

我是客户端,你好服务器

我是客户端,你好服务器

我是客户端,你好服务器

...

补充:

Java ByteArrayOutputStream类

字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。

另外也可以使用转换流处理,效率较低

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidserver02()

{try{

ServerSocket serverSocket=new ServerSocket(4433);while (true)

{

Socket client=serverSocket.accept();

InputStream is=client.getInputStream();intlen;//方式二,使用转换流

InputStreamReader isr=newInputStreamReader(is);char [] cbuf=new char[5];while ((len=isr.read(cbuf))!=-1)

{for (int i=0;i

{

System.out.print(cbuf[i]);

}

}

}

}catch(IOException e) {

e.printStackTrace();

}

}

View Code

案例二:服务器收到客户端数据,并将数据回传给客户端

客户端

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidclient03()

{

Socket socket=null;

ByteArrayOutputStream bos=newByteArrayOutputStream();try{

socket=new Socket("127.0.0.1",4443);//发送数据给服务器

String str=new String("你好服务器,我是李华");byte[] strBytes =str.getBytes(StandardCharsets.UTF_8);

socket.getOutputStream().write(strBytes);//告诉服务器我已经发送完所有数据了

socket.shutdownOutput();//接受服务器回传数据

intlen;byte [] bytes=new byte[1024];while ((len=socket.getInputStream().read(bytes))!=-1)

{

bos.write(bytes,0,len);

}

System.out.println(bos.toString());

}catch(IOException e) {

e.printStackTrace();

}finally{//资源关闭

try{

bos.close();

}catch(IOException e) {

e.printStackTrace();

}if (socket != null) {try{

socket.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

View Code

服务器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidserver03()

{try{

ServerSocket serverSocket=new ServerSocket(4443);while (true)

{

ByteArrayOutputStream bos=newByteArrayOutputStream();

Socket client=serverSocket.accept();intlen;byte [] bytes=new byte[1024];while ((len=client.getInputStream().read(bytes))!=-1)

{

bos.write(bytes,0,len);

}

String str=bos.toString();

System.out.println(str);

String str1="我是服务器,我已经收到你的信息{"+str+"}";byte[] str1Bytes =str1.getBytes(StandardCharsets.UTF_8);

client.getOutputStream().write(str1Bytes);

client.shutdownOutput();

client.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}

View Code

客户端

我是服务器,我已经收到你的信息{你好服务器,我是李华}

服务器

你好服务器,我是李华

案例三:客户端给服务器发送文件,服务器保存文件到本地,并把文件路径告诉客户端

客户端

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidclient04()

{try{

Socket socket=new Socket("127.0.0.1",4443);//读取文件并发送

File file=new File("hello.txt");

FileInputStream fis=newFileInputStream(file);intlen;byte [] buff=new byte[1024];while ((len=fis.read(buff))!=-1)

{

socket.getOutputStream().write(buff,0,len);

}

socket.shutdownOutput();//读取服务器发来的信息

buff=new byte[1024];

ByteArrayOutputStream baos=newByteArrayOutputStream();while ((len=socket.getInputStream().read(buff))!=-1)

{

baos.write(buff,0,len);

}

System.out.println(baos.toString());//关闭资源

baos.close();

fis.close();

socket.close();

}catch(IOException e) {

e.printStackTrace();

}

}

View Code

服务器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic voidserver04()

{try{

ServerSocket serverSocket=new ServerSocket(4443);while (true)

{

Socket client=serverSocket.accept();

String str=System.currentTimeMillis()+".txt";

File file=newFile(str);

FileOutputStream fos=newFileOutputStream(file);intlen;byte [] buff=new byte[1024];while ((len=client.getInputStream().read(buff))!=-1)

{

fos.write(buff,0,len);

}byte[] strBytes =str.getBytes(StandardCharsets.UTF_8);

client.getOutputStream().write(strBytes);

client.shutdownOutput();

client.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}

View Code

客户端

1604033753035.txt

服务器

4151c9e8f82fbc5fbaa0ce497740be29.png

2f9bef65551aa683a0e01f7d75c58f30.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值