Server
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ServerSocker1
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[1024];
Console.Title = "Socket_Server 端";
//得到本機IP,设置TCP端口號
Start:
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8001);//固定Port,用所有可用IP,定義一網路端點
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //定義一個Socket及網路類型,數據連接類型和網路協議 UDP
//綁定網路位址
newsock.Bind(ipep);
Console.WriteLine("This is a Server");
//等待Client端連接
Console.WriteLine("Waiting for a client");
//得到Client端 IP
IPEndPoint myclient = new IPEndPoint(IPAddress.Any, 0); //定義Client端的位址
EndPoint Remote = (EndPoint)(myclient); //Remote:IP&Port
recv = newsock.ReceiveFrom(data, ref Remote);//接收資料
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
//Client端連接成功後,發送歡迎訊息
string welcome = "You can enter a value ";
//字符串與字節數組相互轉換
data = Encoding.ASCII.GetBytes(welcome);
//發送訊息
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)//讀取數據
{
data = new byte[1024];
//發送接受信息
recv = newsock.ReceiveFrom(data, ref Remote);//接收資料
Console.WriteLine(Encoding.GetEncoding(950).GetString(data, 0, recv));//顯示所接收的資料
// newsock.SendTo(data, recv, SocketFlags.None, Remote);//發送所接收的資料回Client端
if (Encoding.GetEncoding(950).GetString(data, 0, recv) == "Socket is closed") //判斷client是否關閉Listen
{
Console.WriteLine();
newsock.Close(); goto Start;
}
else if (Encoding.GetEncoding(950).GetString(data, 0, recv) == "exit")
{
newsock.Close(); goto Start;
}
}
}
}
}
Client
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace Client_Socket_GUI
{
public partial class Form1 : Form
{
byte[] data = new byte[1024]; //用來做數據的緩衝區
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);//指定接收位址--server
int recv=0;
public Form1()
{
InitializeComponent();
}
private void Listen_button_Click(object sender, EventArgs e)
{
Listen_button.Enabled = false;
//發送訊息
IPEndPoint myclient = new IPEndPoint(IPAddress.Any, 0);//定義Client端的位址
EndPoint Remote = (EndPoint)myclient;
//定義一個Socket及網路類型,數據連接類型和網路協議 UDP
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string message = "Connected Client Success! ";
data = Encoding.ASCII.GetBytes(message);
server.SendTo(data, data.Length, SocketFlags.None, ipep);//將訊息發送至Server端
data = new byte[1024];
recv = server.ReceiveFrom(data, ref Remote);//接受來自Server的訊息
label1.Text = Encoding.ASCII.GetString(data, 0, recv);
stop_button.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void input_textbox_TextChanged(object sender, EventArgs e)
{
}
private void stop_button_Click(object sender, EventArgs e)
{
string exit = "Socket is closed";
Listen_button.Enabled = true;
stop_button.Enabled = false;
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定義一個Socket及網路類型,數據連接類型和網路協議 UDP
server.SendTo(Encoding.GetEncoding(950).GetBytes(exit), ipep);//發送數據
label1.Text = "";
server.Close();
recv = 0;
}
private void send_button_Click(object sender, EventArgs e)
{
if (recv!=0)
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定義一個Socket及網路類型,數據連接類型和網路協議 UDP
server.SendTo(Encoding.GetEncoding(950).GetBytes(input_textbox.Text), ipep);//發送數據
}
else
{
MessageBox.Show(this,"press the Listen button please.","Error");
}
input_textbox.Text="";
}
private void timer1_Tick(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void exit_button_Click(object sender, EventArgs e)
{
string exit="exit";
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定義一個Socket及網路類型,數據連接類型和網路協議 UDP
server.SendTo(Encoding.GetEncoding(950).GetBytes(exit), ipep);//發送數據
this.Close();
}
}
}
--------------------------------------------------------------------------------------------------------------------------
以上程式是小弟抓取網路上的範例程式(Console to Console)依照自己的想法來更改的
對於Socket程式還沒有很熟悉,還請各位多多指教 : )
沒有留言:
張貼留言