黒馬プログラマー---SocketプログラミングのTCP

8345 ワード

--------androidトレーニング、javaトレーニング、ご交流をお待ちしております!--------
JAva tcpプログラミング
小知識点:
1.ServerSocket(int port,int backlog)
サーバソケット port ポート番号を表示 , backlog 最大リンク数を表示
たとえば このサーバは同時に10000台しかリンクできません.
2.Socket 空の構造方法があります はい Socket() しかし、これは目的のIPアドレスとポート番号を知らない.
この時に使います connect(SocketAddress endopint)メソッドによるリンク
SocketAddress IPアドレスとポート番号を一緒にカプセル化します
いつもの建立時とは違って
通常はSocketポートを設定 別々に書いてあります
例えばSocket s = new Socket("127.0.0.1",10007);
ドメイン名の解析:
ドメイン名解析はドメイン名をウェブサイト空間IPに指向し、登録されたドメイン名を通じてウェブサイトに簡単にアクセスできるサービスである.ドメイン名解析は、ドメイン名指向、サーバ設定、ドメイン名構成、逆IP登録などとも呼ばれる.簡単に言えば、覚えやすいドメイン名をIPに解析し、サービスはDNSサーバで完了し、ドメイン名をIPアドレスに解析し、このIPアドレスのホスト上でサブディレクトリをドメイン名にバインドします.
2つの方法:第1の方法:まずドメイン名をドメイン名を解析するためのサーバーに送信して、サーバーはIPをコンピュータに返します
第2種類:ローカルで1つのHOSTプロファイルがあって、まずローカルでドメイン名の対応するIPを探して、もしないならばサーバーに送って探します
最初の例:
     :  TCP  :


     (   )

/*
Sock   Tcp
    ,         

     :
Socket      ServerSocket

  TCP  :
1,tcp        。
2,         Socket
	         ServerSocket

	   , 
	    socket  ,         ,          。
	  tcp      。     socket   ,
	        ,     ,     ,           。
	
	  :            
	  ,
	1,  Socket   ,            。
*/
import java.net.*;
import java.io.*;
class TcpClient
{
	public static void main(String[] args)throws Exception
	{
		//      Socket  ,      
		Socket s = new Socket("127.0.0.1",10002);
		
		//      ,    socket      
		OutputStream out = s.getOutputStream();
		//    
		out.write("TCP test".getBytes());
		
		//     
		s.close();

	
	}
}



     (    )

/*
   :                 
   :
1,      socket  ,  ServerSocket();
       
2,            。
  ServerSocket accept  ,    ,
           
3,         、   , 

*/
import java.io.*;
import java.net.*;
class TcpServer 
{
	public static void main(String[] args)throws Exception
	{
		//    socke  ,       。
		ServerSocket ss = new ServerSocket(10002);
		
		//  accept             
		Socket s = ss.accept();
		//  IP  
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip +"...connected");
		
		//           ,  
		//                  
		InputStream in = s.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		
		System.out.println(new String(buf,0,len));
		
		//     
		s.close();
		//     
		ss.close();
		
		
	}
	
}




******************************************************************************************************************************************************************************************************************************************
第2の例:TCPの伝送のクライアントとサービス側の相互訪問を実証する.
/**
 *   TCP              。
 *   :           ,         ,        ;
 * 
 * 
 * 
 *    :
 * 1,  socket  ,          
 * 2,  socket      ,       ,          。
 * 3,  socket      ,          ,   。
 * 4,     .
 */
import java.io.*;
import java.net.*;
public class TCPClient1
{
    public static void main(String[] args) throws  IOException
    {
	//             
	Socket sk = new Socket("127.0.0.1",10003);
	
	//               
	OutputStream out = sk.getOutputStream();
	
	out.write("   ,  ".getBytes());
	
	//         ,      
	InputStream in = sk.getInputStream();
	
	int len = 0;
	byte[] buf = new byte[1024];
	
	len = in.read(buf);
	
	System.out.println(new String(buf,0,len));
	
	
	//        
	sk.close();
    }

}

      :
import java.io.*;
import java.net.*;
public class TCPServer1
{
    public static void main(String[] args)throws Exception
    {
	//       
	ServerSocket ss = new ServerSocket(10003);
	
	//    
	Socket s = ss.accept();
	
	//      
	InputStream in = s.getInputStream();
	
	byte[] buf = new byte[1024];
	
	int len = 0;
	len = in.read(buf);
	//     IP
	String ip = ss.getInetAddress().getHostAddress();
	System.out.println("ip:"+ip);
	
	//    
	System.out.println("      :"+new String(buf,0,len));
	
	//        
	OutputStream out = s.getOutputStream();
	
	out.write("        ".getBytes());
	
	//  
	s.close();
	ss.close();
	
	
    }

}

******************************************************************************************************************************************************************************************************************************************
サーバによるテキスト変換の確立
import java.io.*;
import java.net.*;
/**
 *   :           
 *            ,                   。、
 *                 ,      over ,    .
 * 
 *   :
 *    :
 *            。       io  ,   io        。
 *  :    
 *   :    ,     .
 *           ,       .
 * 
 *   。
 * 1,    ,
 * 2,      。
 * 3,        。
 * 4,            。
 * 5,  ,    。
 * 
 *         ,           ,          
 *        
 * @author    qq 951442843
 *
 */
public class TransClient
{
    public static void main(String[] args)throws Exception
    {
	
	Socket s = new Socket("127.0.0.1",10005);
	
	//            
	BufferedReader bufr = 
		new BufferedReader(new InputStreamReader(System.in));
	//    ,     socket   ,     、
	BufferedWriter bufw = 
		new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
	
	
	//    socket   ,            .
	BufferedReader bufin = 
		new BufferedReader(new InputStreamReader(s.getInputStream()));
	
	
	String line = null;
	
	//                 
	while((line = bufr.readLine()) != null)
	{
	    if("over".equals(line))
	    {
		break;
	    }
	    //    
	    bufw.write(line);
	    //          readLine              
	    bufw.newLine();
	    //          
	    bufw.flush();
	    //          
	    String str = bufin.readLine();
	    System.out.println("server:" + str);
	}
	
	//    
	s.close();
	
    }

}
/**
 *   :             。
 * 
 *                 ,            ,   
 *     ,         。
 * 
 * 
 */


      :
import java.io.*;
import java.net.*;
/**
 *    ;
 *  :socket   
 *   :socket   
 *     ,    。
 * @author Administrator
 *
 */
public class TransServer
{
    public static void main(String[] args)throws Exception
    {
	ServerSocket ss = new ServerSocket(10005);
	//    
	Socket s = ss.accept();
	
	String ip = s.getInetAddress().getHostAddress();
	System.out.println("ip" + ip);
	
	//  socket       
	BufferedReader bufr = 
		new BufferedReader(new InputStreamReader(s.getInputStream()));
	
	//  ,socket   ,        socket   ,       
	BufferedWriter bufw = 
		new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
	
	String line = null;
	while((line = bufr.readLine()) != null)
	{
	    System.out.println(line);
	    //             
	    bufw.write(line.toUpperCase());
	    
	    //          readLine              
	    bufw.newLine();
	    //          
	    bufw.flush();
	}
	
	s.close();
	ss.close();
    }

}

次の例は、上記の例の最適化の小さな変更です.
import java.io.*;
import java.net.*;
/**
 * @author    
 *
 */
public class TransClient
{
    public static void main(String[] args)throws Exception
    {
	
	Socket s = new Socket("127.0.0.1",10005);
	
	//            
	BufferedReader bufr = 
		new BufferedReader(new InputStreamReader(System.in));

	//      
	PrintWriter out = new PrintWriter(s.getOutputStream(),true);
	
	
	//    socket   ,            .
	BufferedReader bufin = 
		new BufferedReader(new InputStreamReader(s.getInputStream()));
	
	
	String line = null;
	
	//                 
	while((line = bufr.readLine()) != null)
	{
	    if("over".equals(line))
	    {
		break;
	    }
	    //    
	    out.println(line);
	    String str = bufin.readLine();
	    System.out.println("server:" + str);
	}
	
	s.close();
	
    }

}


import java.io.*;
import java.net.*;
/**
 *    ;
 *  :socket   
 *   :socket   
 *     ,  。
 * @author Administrator
 *
 */
public class TransServer
{
    public static void main(String[] args)throws Exception
    {
	ServerSocket ss = new ServerSocket(10005);
	//    
	Socket s = ss.accept();
	
	String ip = s.getInetAddress().getHostAddress();
	System.out.println("ip" + ip);
	
	//  socket       
	BufferedReader bufr = 
		new BufferedReader(new InputStreamReader(s.getInputStream()));
	
		//       PrintWrite
	PrintWriter out = new PrintWriter(s.getOutputStream(),true);

	String line = null;
	while((line = bufr.readLine()) != null)
	{
		System.out.println(line);
	    
		out.println(line.toUpperCase());
	}
	
	s.close();
	ss.close();
    }

}