這是進階版,入板可以參考這裡 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");
}
}
全站熱搜