1. 程式人生 > >我是蒙古人--網絡編程

我是蒙古人--網絡編程

public != ack log 5.1 byte nts todo 類型

1,java的服務器通過serverSocket建立TCP服務器,利用 Socket 建立TCP 客戶端。

2,cmd 調出 dos 命令窗口 ,輸入ipconfig /all 來查看機器上所有ip 地址

3,創建(服務器)和(客戶端)的代碼如下:

package cn.day1;
/*
*服務器
*
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server{
	public static void main(String[] args) throws IOException {
		 //創建監聽socked
		 ServerSocket server=new ServerSocket(50000);
		 System.out.println("服務端");
		 //創建通訊socket
		 Socket socket = server.accept();
	         //用輸入流接收客戶端請求
                 getInputStream stream= socket.getInputStream();
		 int date;
                 byte[] by=new byte[1024];
                 while((date=stream.read(by))!=-1){
                           String temp=new String(by,0,date);
                           System.out.println(temp);
                 }
                 stream.close();		
	}
		
}

  

package cn.day1;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/*
 * 客戶端
 */
public class sock {

	public static void main(String[] args) throws UnknownHostException, IOException {
		
		Socket so=new Socket("192.168.15.117",50000);
		//用輸出流輸出客戶端請求
		OutputStream stream = so.getOutputStream();
		String name="娜娜";
		stream.write(name.getBytes());
		stream.close();
	}

}

4,要想多個客戶端給一個服務器發信息,那麽我們用到(線程)以及(死循環)。

代碼如下:

package cn.day1;
/*
 * 建立線程
 */
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class Tread extends Thread{
	Socket socket=null;

	@Override
	public void run() {
		while(true){
			InputStream stream = null;
			try {
				stream = socket.getInputStream();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			byte[] bytes=new byte[1024];
			int dex;
			try {
				while((dex=stream.read(bytes))!=-1){
					//數據在二進制數組裏頭,轉換成字符串類型
					String temp=new String(bytes,0,dex);
					System.out.println(temp);
}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}
	}
}



package cn.day1;
/*
 * 使用無限循環接收 多個客戶端 請求
 */
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class X {
	public static void main(String[] args) throws IOException {
		//z創建監聽socked
		ServerSocket server=new ServerSocket(50000);
		System.out.println("服務端");
		//創建通訊socket
		while(true){
		Socket socket = server.accept();
		Tread t1=new Tread();
		t1.socket=socket;
		t1.start();
		}
		
	}
}

 5,服務器接收客戶端請求以後反饋給客戶端的代碼如下:

package cn.day1;


	/*
	*服務器
	*
	*/
	import java.io.IOException;
	import java.io.InputStream;
	import java.io.OutputStream;
	import java.net.ServerSocket;
	import java.net.Socket;
	public class Server {
	
		public static void main(String[] args) throws IOException {
			 //創建監聽socked
			 ServerSocket server=new ServerSocket(50000);
			 System.out.println("服務端");
			 //創建通訊socket
			 Socket socket = server.accept();
			 
			 
		         //用輸入流接收客戶端請求
	         InputStream stream= socket.getInputStream();
			 int date;
	         byte[] by=new byte[1024];
	         while((date=stream.read(by))!=-1){
	              String temp=new String(by,0,date);
	              System.out.println(temp);
	         }
	         socket.shutdownInput();
	         //服務器給客戶端一個相應
	         //打開輸出流,發送數據
	         OutputStream os = socket.getOutputStream();
	         String name="我是服務器,客戶端登錄成功";
	         os.write(name.getBytes());
	         
	         os.close();
	         stream.close();		
		}
			
	}




package cn.day1;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
	/*
	 * 客戶端
	 */
	public class Socket {

		public static void main(String[] args) throws UnknownHostException, IOException {
			
			Socket so=new Socket("192.168.15.117",50000);
			//用輸出流輸出客戶端請求
			OutputStream stream = so.getOutputStream();
			String name="娜娜";
			stream.write(name.getBytes());
			so.shutdownOutput();
			//服務器接收客戶端反饋
			InputStream is = so.getInputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(is));
		    name="";
		    while((name=br.readLine())!=null){
		    	System.out.println(name);
		    }
			
			
			is.close();
			
			stream.close();
		}

	}

  註意:用完一次服務器或客戶端我們該關閉它們。

列如:

so.shutdownOutput();

我是蒙古人--網絡編程