這是進階版,入板可以參考這裡 http://lolikitty.pixnet.net/blog/post/68347592

--------------------------------------------------------------------------------------

MyServer.java


import java.net.*;

public class MyServer {

    public static void main(String[] args) {

        int port = 1024;
        try {
            ServerSocket ss = new ServerSocket(port);
            System.out.println("伺服器已啟動...");
            while (true) {
                try {
                    Socket s = ss.accept();
                    Accept a = new Accept(s); // 把連線的 Socket 傳入 Accept 類別中
                    a.start(); // 建立 執行緒 (線程),會呼叫 Accept 類別的 run () 方法
                } catch (Exception e) {
                    System.out.println(e);
                }
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

----------------------------------------------------------------------------------------------------------------------

Accept.java


import java.io.BufferedReader;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class Accept extends Thread {
    Socket s;
    public Accept(Socket s) {
        this.s = s;
    }
    @Override
    public void run() {
        try {
            BufferedReader buf = new BufferedReader(new InputStreamReader(s.getInputStream()));
            PrintWriter w = new PrintWriter(new OutputStreamWriter(s.getOutputStream()), true);
            String msg;
            int i = 0;
            while ((msg = buf.readLine()) != null) {
                System.out.println("從 Client 接收的資料:" + msg);
                w.println("------------ " + (i++) + "\n這是 Server 的資料\nHello\nWorld");
            }
            s.close();
        } catch (Exception e) {
            System.out.println("中斷連線");
        }
    }
}

----------------------------------------------------------------------------------------------------------------------

MyClient.cs

using UnityEngine;
using System.Net.Sockets;
using System.IO;
using System.Threading;

public class MyClient : MonoBehaviour
{
    StreamWriter sw = null;
    TcpClient tc = null;
    NetworkStream ns = null;
    StreamReader sr = null;
    int i = 0;
    bool isConnect = false;

    void OnGUI()
    {
        if (GUILayout.Button("Init"))
        {
            if (isConnect)
            {
                return; // 已經連線的話就退出,防止重複連線
            }
            tc = new TcpClient("127.0.0.1", 1024);
            ns = tc.GetStream();
            sw = new StreamWriter(ns);
            sr = new StreamReader(ns);
            sw.AutoFlush = true; //自動刷新資料
            isConnect = true;
            new Thread(readData).Start(); // 建立執行緒,這樣Unity就不會為了讀取Server資料而卡在那邊(當機)            
            print("Connect !");
        }

        if (GUILayout.Button("Send"))
        {
            sw.WriteLine("Hello~    " + i++);
        }
    }

    void readData()
    {
        while (isConnect)
        {
            print(sr.ReadLine()); // 從伺服器讀取資料
        }
    }

    void OnApplicationQuit()
    {
        sr.Close();
        sw.Close();
        ns.Close();
        tc.Close();
        
        isConnect = false;
        print("Close");
    }

}










arrow
arrow
    全站熱搜

    黃彥霖 發表在 痞客邦 留言(2) 人氣()