黒馬プログラマー-java基礎-Socketネットワークプログラミング

4251 ワード

androidトレーニング、javaトレーニングはあなたと交流することを期待しています!
ネットワーク通信の3つの要素:
1、IPアドレス
2、ポート番号、ポート番号はアプリケーションのIDです.範囲:0-65535.このうち0-1024は推奨されません.
3、プロトコル、プロトコルはUDPとTCPプロトコルがある
UDP:データのパッケージング、データの大きさは制限があって、接続がなくて、効率は高くて、信頼できません.TCP:データチャネルを確立し、データサイズに制限がなく、効率が低く、信頼性が高い.
ネットワークプロトコルは、コンピュータネットワークにおけるデータ交換のために確立されたルール、標準、または約束の集合である.UDPは無接続向けで、データが安全ではなく、速度が速い.クライアントとサービスを区別しません.TCPは接続に向いており(3回握手)、データは安全で、速度はやや低い.クライアントとサービスに分けられます.Socket通信の両端にSocketがあります.ネット通信は実はSocket間の通信です.データは2つのSocket間でIOを介して転送される.Socketはアプリケーションで作成し、バインドメカニズムを介してドライバと関係を確立し、対応するIPとportを自分に伝える.
UDPプロトコル送信と受信データ:送信側:UDP送信側のDatagramSocketオブジェクトを作成データを作成し、データをパッケージング送信データ解放リソース受信側:UDP受信側のDatagramSocketオブジェクトを作成データ受信データ解析パケット解放リソースを受信するためのパケットを作成する
UDPケースコード
送信側のコード:
package UDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class SendDemo1 {
	public static void main(String[] args) throws IOException {
		//  datagramSocket  
		DatagramSocket ds=new DatagramSocket();
		
		//      DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
		InetAddress address=InetAddress.getByName("    ");//     Socket IP  
		int port =8080;//     
		byte[] buf="Hello,UDP。          !".getBytes();//      
		int length =buf.length;
		DatagramPacket dp=new DatagramPacket(buf,length,address,port);//     
		//     
		ds.send(dp);
		//    
		ds.close();
	}
}

受信側コード
package UDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class ReceiveDemo1 {
	public static void main(String[] args) throws IOException {
		//  DatagramSocket  ,     
		DatagramSocket ds=new DatagramSocket(10086);
		//            
		byte[] by=new byte[1024];
		int length=by.length;
		DatagramPacket dp=new DatagramPacket(by,length);
		//              
		ds.receive(dp);
		//         
		InetAddress Address=dp.getAddress();
		String ip=Address.getHostAddress();
		byte[] by2 =dp.getData();//  DatagramPacket getData  ,      
		int length2 =dp.getLength();//  DatagramPacket getLength  ,    
		//           
		String s=new String(by2,0,length2);
		System.out.println(ip+"       :"+s);
		
		//    
		ds.close();
	}
}

TCPプロトコルによるデータの送受信:

送り先:TCPクライアントのSocketオブジェクトを作成して出力ストリームを取得し、書き込みデータ解放リソース受信側:TCPサーバ側のSocketオブジェクトを作成してクライアント接続を傍受して入力ストリームを取得し、データを読み取る
リソースの解放
TCPケースコード
送信側コード
package TCP;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;


public class CopyMp3Client {
	public static void main(String[] args) throws IOException{
		//     Socket  
		Socket s =new Socket("192.168.1.105",9999);
		//     
		InputStream is=new FileInputStream("F:\\Beyond -   .mp3");
		//          
		OutputStream os=s.getOutputStream();
		//         
		byte[] byt=new byte[1024]; 
		int length=0;
		while((length=is.read(byt))!=-1){
			os.write(byt,0,length); //    
		}
		
		//           
		s.shutdownOutput();
		
		//          
		InputStream isClient=s.getInputStream();//               
		byte[] byt2=new byte[1024];//         
		String line=null;
		int len=isClient.read(byt2);
		String Client=new String(byt2,0,len);
		System.out.println(Client);
		
		//    
		is.close();
		s.close();
	}
}

受信側コード:
package TCP;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class CopyMp3Server {
	public static void main(String[] args) throws IOException {
		//     Socket  
		ServerSocket ss=new ServerSocket(9999);
		//        
		Socket s=ss.accept();
		//     
		FileOutputStream  os=new FileOutputStream("G:\\Copy-   .mp3");
		//         
		InputStream is=s.getInputStream();
		byte[] byt=new byte[1024];
		int len=0;
		while((len=is.read(byt))!=-1){
			os.write(byt, 0, len);
		}
		
		//        
		OutputStream osSever=s.getOutputStream();
		osSever.write("      ".getBytes());
		
		//    
		os.close();
		s.close();
	}
}