【黑馬程序員】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();

                }

        }
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章