想要写一个网络五子棋游戏,form里面有两个按钮,一个是建立游戏,一个是加入游戏,当按建立游戏时,
则作为服务器,当按加入游戏时,则为客户端,想要在同一台机上测试, 要如何实现, public partial class Form1 : Form
{
TcpClient tcpClient;
TcpListener tcpListener;
StreamWriter sw;
StreamReader sr;
Thread t;
IPAddress localAddress;
int port;
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//tcpClient = new TcpClient(new IPEndPoint(localAddress,port));
tcpListener = new TcpListener(localAddress, port);
tcpListener.Start();
t = new Thread(new ThreadStart(receiveConnect));
t.Start(); CreateBtn.Enabled = false;
JoinBtn.Enabled = false;
}
private void receiveConnect()
{
try
{
tcpClient = tcpListener.AcceptTcpClient();
}
catch
{ } receiveData(tcpClient);
}
private void receiveData(Object o)
{
TcpClient client = (TcpClient)o;
sw = new StreamWriter(client.GetStream(), System.Text.Encoding.UTF8);
sr = new StreamReader(client.GetStream(), System.Text.Encoding.UTF8);
while (true)
{
string str = sr.ReadLine();
string[] split = str.Split(',');
switch (split[0])
{
case "ready":
break;
case "play":
string x = split[1];
string y = split[2];
break;
case "connect":
MessageBox.Show("connect");
sw.WriteLine("connectSuccess");
sw.Flush();
break;
case "connectSuccess":
MessageBox.Show("connectsuccess");
break;
}
}
} private void Form1_Load(object sender, EventArgs e)
{
IPAddress[] addrIP = Dns.GetHostAddresses(Dns.GetHostName());
localAddress = addrIP[0];
port = 6688;
} private void button2_Click(object sender, EventArgs e)
{
CreateBtn.Enabled = false;
JoinBtn.Enabled = false;
tcpClient = new TcpClient(new IPEndPoint(localAddress, port));
StreamWriter streamWriter = new StreamWriter(tcpClient.GetStream(), System.Text.Encoding.UTF8);
streamWriter.WriteLine("connect");
streamWriter.Flush();
t = new Thread(new ParameterizedThreadStart(receiveData));
t.Start(tcpClient);
}
}
则作为服务器,当按加入游戏时,则为客户端,想要在同一台机上测试, 要如何实现, public partial class Form1 : Form
{
TcpClient tcpClient;
TcpListener tcpListener;
StreamWriter sw;
StreamReader sr;
Thread t;
IPAddress localAddress;
int port;
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//tcpClient = new TcpClient(new IPEndPoint(localAddress,port));
tcpListener = new TcpListener(localAddress, port);
tcpListener.Start();
t = new Thread(new ThreadStart(receiveConnect));
t.Start(); CreateBtn.Enabled = false;
JoinBtn.Enabled = false;
}
private void receiveConnect()
{
try
{
tcpClient = tcpListener.AcceptTcpClient();
}
catch
{ } receiveData(tcpClient);
}
private void receiveData(Object o)
{
TcpClient client = (TcpClient)o;
sw = new StreamWriter(client.GetStream(), System.Text.Encoding.UTF8);
sr = new StreamReader(client.GetStream(), System.Text.Encoding.UTF8);
while (true)
{
string str = sr.ReadLine();
string[] split = str.Split(',');
switch (split[0])
{
case "ready":
break;
case "play":
string x = split[1];
string y = split[2];
break;
case "connect":
MessageBox.Show("connect");
sw.WriteLine("connectSuccess");
sw.Flush();
break;
case "connectSuccess":
MessageBox.Show("connectsuccess");
break;
}
}
} private void Form1_Load(object sender, EventArgs e)
{
IPAddress[] addrIP = Dns.GetHostAddresses(Dns.GetHostName());
localAddress = addrIP[0];
port = 6688;
} private void button2_Click(object sender, EventArgs e)
{
CreateBtn.Enabled = false;
JoinBtn.Enabled = false;
tcpClient = new TcpClient(new IPEndPoint(localAddress, port));
StreamWriter streamWriter = new StreamWriter(tcpClient.GetStream(), System.Text.Encoding.UTF8);
streamWriter.WriteLine("connect");
streamWriter.Flush();
t = new Thread(new ParameterizedThreadStart(receiveData));
t.Start(tcpClient);
}
}
要是不想扫描,你另外开个服务端,端口固定,建立的时候告它,加入的时候问它。f5出来一个五子棋进程,再f5又出来一个,可以在一台机器测试的。
实例字段 List<int> 服务端列表;
form_load()有this.port=nextport++;
建立游戏_click()有tcpListener = new TcpListener(localAddress, this.port);
加入游戏_click()有this.服务端列表=new List<int>();
for(int i=startport; i<=nextport;i++){bool existt=问答;if(existt){this.服务端列表.Add(i);}}
然后出个ComboBox是服务端列表,选好,出个按牛“开始”,才是建立TcpClient,开始游戏。