4
我是C#的新手,我正在使用Socket编程进行操作。在客户端之间发送消息(Socket UDP)
首先我创建了一个客户端连接到它的服务器。
服务器:
class Program {
static void Main(string[] args) {
int recv;
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 1900);
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
newsock.Bind(ipep);
Console.WriteLine("Waiting for a client...");
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
string welcome = "Welcome to my test server";
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.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}
}
客户:
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 serverUDPWF {
public partial class ServerForm : Form {
byte[] data = new byte[30];
string input = "";
string stringData = "";
IPEndPoint iep,sender;
Socket server;
string welcome = "";
int recv;
EndPoint tmpRemote;
public ServerForm() {
InitializeComponent();
startServer();
}
public void startServer() {
iep = new IPEndPoint(
IPAddress.Parse("127.0.0.1"), 1900);
server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
welcome = "Hello, are you there?";
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, iep);
sender = new IPEndPoint(IPAddress.Any, 0);
tmpRemote = (EndPoint)sender;
data = new byte[30];
recv = server.ReceiveFrom(data, ref tmpRemote);
Console.WriteLine();
listBox1.Items.Add("Message received from {0}:" + tmpRemote.ToString());
listBox1.Items.Add(Encoding.ASCII.GetString(data, 0, recv));
}
private void sendMessageToserver(object sender, EventArgs e) {
if (textBox2.Text == "") {
MessageBox.Show("Please Enter Your Name");
}
else {
int i = 30;
input = textBox2.Text + ": " + textBox1.Text;
if (input == "exit") {
this.Close();
}
server.SendTo(Encoding.ASCII.GetBytes(input), tmpRemote);
textBox1.Text = "";
data = new byte[i];
try {
recv = server.ReceiveFrom(data, ref tmpRemote);
stringData = Encoding.ASCII.GetString(data, 0, recv);
listBox1.Items.Add(stringData);
}
catch (SocketException) {
listBox1.Items.Add("WARNING: data lost, retry message.");
i += 10;
}
}
}
}
}
我的问题是,如何让客户端不需要输入服务器的IP地址127.0.0.1一样。我的第二个问题是我同时打开2个客户端,但客户端A向服务器发送消息,但客户端B没有收到来自客户端A的消息(我想发送广播类型消息)
我该怎么办那?
你是什么意思说“使客户端不需要输入服务器IP地址“? – 2012-02-14 18:38:24
我的意思是在一个LAN网络客户端只发送一条消息到服务器,但它不需要定义服务器IP它只是发送一个广播消息和服务器只需打开一个端口像1900当客户端通过此端口发送到服务器,服务器捕获此消息客户端可以连接到服务器 – MYE 2012-02-15 02:22:04