一项目,客户端和服务端是两个单独的程序。 求如下简要示例:
客户端向服务器端发送用户名、密码。服务器端检测是否正确,并向客户端返回消息。
private void button1_Click(object sender, EventArgs e) { int port = 2000; string host = "127.0.0.1"; Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IPv4); IPAddress ip=IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); byte[] bytes = Encoding.ASCII.GetBytes(this.textBox1.Text.Trim() + "&" + this.textBox2.Text.Trim()); socket.Connect(ipe); socket.Send(bytes, bytes.Length, 0); }
如上代码,客户端只是做到了向服务端发送用户名和密码本身,服务端即使接收到了该数据,也不知道该如何处理。
求教大家,客户端如何调用服务端某个具体方法。一定不考虑wcf!
服务端监听本机的2000号端口,等待连接呗。
服务端监听2000的端口号之后只能收到用户名和密码这个数据。服务端怎么知道客户端想干什么?是验证用户名密码对不对还是想删除这个用户或是其他?
@快乐鸟: 你再多传一个参数不就得了。
@幻天芒: 亲,你没开玩笑吧?怎么多传一个参数?socket.Send()这个方法的所有重载中,就没有能指定要调用服务端某个具体方法的参数。
@快乐鸟: 一般客户端不让调用服务器方法的。可能有,但一定很复杂。一般这种通信问题,都要设定协议,就是上面说的,加个参数,也是加到byte[]里面。
@angelshelter:
byte[] bytes = Encoding.ASCII.GetBytes(this.textBox1.Text.Trim() + "&" + this.textBox2.Text.Trim());
这里不就可以多传一个吗???
@幻天芒: 我传递的是字符串啊。难道接收端要这么判断
static void Main(string[] args) { int port = 2000; string host = "127.0.0.1"; //创建终结点 IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip,port); //创建Socket并开始监听 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建一个Socket对象,如果用UDP协议,则要用SocketTyype.Dgram类型的套接字 s.Bind(ipe); //绑定EndPoint对象(2000端口和ip地址) s.Listen(0); //开始监听 Console.WriteLine("等待客户端连接"); //接受到Client连接,为此连接建立新的Socket,并接受消息 Socket temp = s.Accept(); //为新建立的连接创建新的Socket Console.WriteLine("建立连接"); string recvStr = ""; byte[] recvBytes = new byte[1024]; int bytes; bytes = temp.Receive(recvBytes,recvBytes.Length,0); //从客户端接受消息 recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); if(recvStr.Splt(',')[0] == "Check") { //检测用户名密码。recvStr.Splt(',')[0] 为约定的协议(暗号)如果值为“Check”,则执行检测用户名密码工功能。 } //无数个if判断。或者写成swich循环 } }
@快乐鸟: 有何不可???
先定义协议,如登陆[ESC]L[ESC]UsrName[ESC]Password[ESC][nil],查询好友列表[ESC]F[ESC]UseID[ESC][nil],这样的话,发第一个就可以确认是否登,发第二个就可以获取好友列表了。
如果你不想用WCF的话 就用Shuttler.net吧
调用很简单 开源中国可以下载到源码
其实最简单的数据交互方式为 JSON和XML
打个简单的比方
你要登陆 就把你登陆的实体序列化成JSON传给服务端 服务器解析JSON为对象 在进行业务操作
并且把结果返回给客户端
能给个简单的示例吗?