Socket 程式設計 (網路篇)

weixin_33797791發表於2016-07-30

Socket (ip,port)任何臺機兩個要連在一起需要 ip和port ( 埠 監聽)。只要port相同。
一臺機器有幾個程式,每個程式需要一個埠,傳遞接受包。網站的埠80。
ServerSocket ( port )伺服器開啟。
如果Socket s1發出訊息,accept ( ) 接受以後建立Socket s2與之對應。
Socket s2 = accept ;
Socket的兩個類,InputStream(輸入),OutputStream(輸出).

package Server;
//控制檯找ip:ipconfig
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {

    public static int port=3000;
    public static final String ip="192.168.31.146";
    public static void main(String[] args) {
//      System.out.println("開始"+port+"連上啟動伺服器。。。");
        
        try{
            ServerSocket ss = new ServerSocket(port);//建立Socket 傳入值。
            System.out.println("成功啟動伺服器,埠:"+port);
            Socket socket = ss.accept();//開啟伺服器。接受資料,返回socket
            System.out.println("連上客戶端。。。");
            
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));//寫資料
            BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//出資料
            
            String clientMsg;//傳送的資料
            String serverMsg;//接受的資料
            
            Scanner sc = new Scanner(System.in);
            clientMsg = input.readLine();
            
            while(clientMsg !="bye"){
                System.out.println(clientMsg);

                serverMsg = sc.nextLine();//等待發訊息
                output.write(serverMsg+"\r\n");
                output.flush();//傳送
                
                clientMsg = input.readLine();
            }
            sc.close();
            ss.close();//socket埠關閉
            
        }catch(IOException e){
            e.printStackTrace();
        }
    }

}

package Server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    //s.getInputStream(位元組)->InputStreamReader(字元)->Buffered(句子,可以定時傳送。)客戶端也可使用,取決於需求。
    public static int port=3006;
    public static final String ip="192.168.31.146";//連線其他的客戶端。
    
    public static void main(String[] args) {
        
        try{
            Socket s = new Socket(ip,port);//建立Socket 傳入值。
            System.out.println("連上伺服器端。。。");
            BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));//放資料
            BufferedWriter output = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//拿資料
            String clientMsg;//傳送資料
            
            String serverMsg;//接受資料
            
            Scanner sc = new Scanner(System.in);
            clientMsg = sc.nextLine();
            
            while(clientMsg !="bye"){
                output.write(clientMsg+"\r\n"); //"\r\n"換行
                output.flush();//傳送
                
                serverMsg = input.readLine();//等待發訊息
                System.out.println(serverMsg);//列印訊息
            }
            sc.close();
            s.close();
            
        }catch(IOException e){
            e.printStackTrace();//
        }

    }

}

相關文章