【黑马程序员】java中--------------------网络编程二

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


一、TCP传输协议

TCP特点:

面向连接的、通信是安全可靠的、速度慢、可以用于大数据传输、通过3次握手建立连接

可以用于下载数据。


要用到net包和io包;

发送端:数据无需封包操作,直接通过socket类中的输出流和输入流,将数据输入或者输出到socket流中

需要定义结束标记

结束端:通过serverSocket类中,accept()进行连接发送端

用的缓冲区,需要用到io包

练习代码:

/*				Tcp传输
注意:一定一定要,使用了缓冲区技术,要换行newLine(),要刷新fulsh();

还有定义结束标记
*/

import java.net.*;
import java.io.*;
class Socket1
{
	public static void main(String[] args)throws Exception
	{	
		//创建socket流对象
		Socket s=new Socket("125.126.146.21",10004);
		//获取键盘录入
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		//获取socket输出流
		BufferedWriter bufwout=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//获取socket输入流
		BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		while((line=bufr.readLine())!=null)
		{
			bufwout.write(line);
			if("over".equals(line))
				break;
			bufwout.newLine();//换行
			bufwout.flush();//刷新
			
			String str=bufrin.readLine();
		
			System.out.println("ServerSocket::"+str);
		}
		bufrin.close();
		s.close();
	
	}
}

//服务端
class TcpServer1
{
	public static void main(String[] args)throws Exception
	{	
		//创建服务端socket流对象
		ServerSocket ss=new ServerSocket(10004);
		//与客户端进行连接
		Socket s=ss.accept();
		//获取输入流
		BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
		//获取输出流
		BufferedWriter bufwout=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//获取客户端ip地址
		String ip=s.getInetAddress().getHostAddress();
		System.out.println("\\"+ip+"::::::::::::");
			
		String line=null;
		while((line=bufrin.readLine())!=null)
		{
			bufwout.write(line);
			//bufwout.write(line.toUpperCase());
			bufwout.newLine();//换行
			bufwout.flush();//刷新
			
			System.out.println("socket="+line);
		}
		bufwout.close();
	}
}

代码练习二:

/*	Tcp传输				Tcp传输,面向连接的,安全的传输协议
分为两部分:
客户端:socket类--->类中有getOutputStream()方法获取输出流
		在流中写入数据write()方法,并转换成字节流
进行发送数据。指定一个ip
*/
import java.net.*;
import java.io.*;
class Socket
{
	public static void main(String[] args)
	{
		Sockt s=new Socket("125.126.146.21",100002);
		OutputStream out=s.getOutptuStream();
		out.write("我是客户端".getBytes());
	
		s.close();
	}
}

/*
服务端接收数据,并打印在控制台
1,服务端:ServerSocket类,建立对象是并监听一个端口
2 ,获取连接过来的客户端对象
   通过ServerSocket对象的accept()方法。没有连接就会等,阻塞式方法
3,客户端如果发来数据,那么服务端要使用客户端对象
	并用客户端的读取流来读取客户端发来的数据
	并打印
4,关闭资源(可选项)
*/

class TcpServer
{
	public static void main(String[] args)
	{
		ServerSocket ss=new ServerSocket(10002);
		Socket s=ss.accept();
		InputStream in=s.getInputStream();
		
		String ip=s.getInetAddress.getHostAddress();
		System.out.println(ip);
		
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		
		System.out.println(new String(buf,0,buf.length()));
	}
}

代码练习3: 上传图片到服务端

/*
						上传图片上传图片	上传图片

*/

import java.io.*;
import java.net.*;
class Pic{
	public static void main(String[] args)throws Exception
	{
		Socket s=new Socket("125.126.150.32",10003);
		
		FileInputStream fi=new FileInputStream("1psu.jpg");
		
		OutputStream out=s.getOutputStream();
		
		byte[] b=new byte[1024];
		int len=0;
		while((len=fi.read(b))!=-1){
			out.write(b,0,len);
		}
		//结束标记
		s.shutdownOutput();
		
		InputStream in=s.getInputStream();
		byte[] by=new byte[1024];
		int line=in.read(by);
		System.out.println(new String(by,0,line));
		
		fi.close();
		s.close();
		
	}
}

class PicServer{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss=new ServerSocket(10003);
		Socket s=ss.accept();
		
		InputStream in=s.getInputStream();
		FileOutputStream fos=new FileOutputStream("复制_秀云.jpg");
		
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip);
		byte[] b=new byte[1024];
		int len=0;
		while((len=in.read(b))!=-1){
			fos.write(b,0,len);
		}
		
		OutputStream out=s.getOutputStream();
		out.write("pic图片上传成功!!!!!!!!!!!".getBytes());
		
		fos.close();
		s.close();
	}
}

代码练习4;上传文本文件到服务端

/*						上传文本文件:云.txt
 
 用于客户端的输出流:
 void shutdownOutput() 
          禁用此套接字的输出流。 
*/

import java.io.*;
import java.net.*;
//自定义客户端
class SocketTxt{
	public static void main(String[] args)throws Exception
	{
		Socket s=new Socket("125.126.150.32",10002);
		//创建带缓冲区的读取流对象
		BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("云.txt")));
		//创建socket输出流
		PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true);
		String line=null;
		while((line=br.readLine())!=null){
			pwOut.write(line);
		
		}
		//输出流结束标记
		s.shutdownOutput();
		//获取socket读取流
		BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String len=brIn.readLine();
		System.out.println(len);
		
		
		br.close();
		s.close();
	}
}


//自定义服务端
class ServerSocketTxt{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss=new ServerSocket(10002);
		Socket s=ss.accept();
		
		BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
		//PrintWriter pw=new PrintWriter(new FileWriter("云_复制.txt"),true);
		
		BufferedWriter bw=new BufferedWriter(new FileWriter("云_复制.txt"));
		
		//获取客户端ip地址
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip);
		
		String line=null;
		while((line=brIn.readLine())!=null){
			//pw.println(line);
			bw.write(line);
		}
		//向客户端返回提示信息
		PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true);
		pwOut.println("上传文件成功!!!");
		
		bw.close();
		//pw.close();
		s.close();
	}
}

代码练习5:自定义服务端,IE浏览器为客户端

/*服务端					服务端服务端服务端



*/
import java.net.*;
import java.io.*;

class TcpServerSocket2 {
        public static void main(String[] args) throws Exception {
                ServerSocket ss = new ServerSocket(10010);
                while (true) {
                        Socket s = ss.accept();
                        BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());

                        System.out.println(s.getInetAddress().getHostAddress());
                        //PrintWriter pw = new PrintWriter(out, true);

                        //pw.println("欢迎访问我的服务器!");
                        //out.write(123456);

                        // 建立图片读取流对象,并写入ServerSocket流中,图片70.4kb
                        BufferedInputStream bis= new BufferedInputStream(new FileInputStream("1psu.jpg"));
                        byte[] buf = new byte[1024*1024];
                        int len = 0;
                        while ((len = bis.read(buf)) != -1) {
                                out.write(buf, 0, len);
                        }
                        
                        bis.close();
                        out.close();
                        //pw.close();
                        s.close();

                }

        }
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值