公告版位
需要找什麼嗎? 左邊分類或許可以幫助你...
這是進階版,入板可以參考這裡 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");
    }

}










創作者介紹
創作者 黃彥霖 的頭像
黃彥霖

彥霖 實驗筆記

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


留言列表 (2)

發表留言
  • 悄悄話
  • Wing
  • 我把他寫成了swing
    可是我要怎麼把socket close?
  • 使用兩條執行緒來操作
    Socket 一條
    Swing 一條
    然後用 Swing Button 去關閉 Socket 即可

    例如 Socket 宣告成 public static

    黃彥霖 於 2016/10/12 15:47 回覆