求c# 客户端与服务器端通讯的例子
求c# 客户端与服务器端通讯的例子
客户端发送一段字符串“您好啊”给服务器端,服务器端返回“您也好”
有没有相关的代码资料参考?完整点的
[解决办法]
哥们,你说的也太笼统了 我们跟本就没明白意思
1.你说的客户端和服务器端没明白意思
2.soket就可以实现
3.b/s也可以
[解决办法]
呵呵 我也有点不明白 。
这个代码你看看吧
http://download.csdn.net/source/1336987
[解决办法]
http://cid-181e9b2001d6aa91.spaces.live.com/blog/cns!181E9B2001D6AA91!395.entry
这个亲测,可以的,而且很基础
[解决办法]
以前自己写过一个Socket+多线程。
就是仿QQ即时通讯的。
Socket用法用5楼的差不多。
只不过5楼的没有用线程处理。
[解决办法]
这个我做过,TCP,socket通信就可以
[解决办法]
- C# code
//客户端 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 9 using System.Net; 10 using System.Net.Sockets; 11 12 namespace Client 13 { 14 public partial class ClientMain : Form 15 { 16 public ClientMain() 17 { 18 InitializeComponent(); 19 } 20 21 private IPEndPoint ServerInfo; 22 private Socket ClientSocket; 23 private Byte[] MsgBuffer; 24 private Byte[] MsgSend; 25 26 private void ClientMain_Load(object sender, EventArgs e) 27 { 28 this.CmdSend.Enabled = false; 29 this.CmdExit.Enabled = false; 30 31 ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 32 MsgBuffer = new Byte[65535]; 33 MsgSend = new Byte[65535]; 34 CheckForIllegalCrossThreadCalls = false; 35 36 Random TRand=new Random(); 37 this.UserName.Text = "用户" + TRand.Next(10000).ToString(); 38 } 39 40 private void CmdEnter_Click(object sender, EventArgs e) 41 { 42 ServerInfo = new IPEndPoint(IPAddress.Parse(this.ServerIP.Text), Convert.ToInt32(this.ServerPort.Text)); 43 44 try 45 { 46 ClientSocket.Connect(ServerInfo); 47 48 ClientSocket.Send(Encoding.Unicode.GetBytes("用户: " + this.UserName.Text + " 进入系统!\n")); 49 50 ClientSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null); 51 52 this.SysMsg.Text += "登录服务器成功!\n"; 53 this.CmdSend.Enabled = true; 54 this.CmdEnter.Enabled = false; 55 this.CmdExit.Enabled = true; 56 } 57 catch 58 { 59 MessageBox.Show("登录服务器失败,请确认服务器是否正常工作!"); 60 } 61 } 62 63 private void ReceiveCallBack(IAsyncResult AR) 64 { 65 try 66 { 67 int REnd = ClientSocket.EndReceive(AR); 68 this.RecieveMsg.AppendText(Encoding.Unicode.GetString(MsgBuffer, 0, REnd)); 69 ClientSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null); 70 71 } 72 catch 73 { 74 MessageBox.Show("已经与服务器断开连接!"); 75 this.Close(); 76 } 77 78 } 79 80 private void CmdSend_Click(object sender, EventArgs e) 81 { 82 MsgSend = Encoding.Unicode.GetBytes(this.UserName.Text + "说:\n" + this.SendMsg.Text + "\n"); 83 if (ClientSocket.Connected) 84 { 85 ClientSocket.Send(MsgSend); 86 this.SendMsg.Text = ""; 87 } 88 else 89 { 90 MessageBox.Show("当前与服务器断开连接,无法发送信息!"); 91 } 92 } 93 94 private void CmdExit_Click(object sender, EventArgs e) 95 { 96 if (ClientSocket.Connected) 97 { 98 ClientSocket.Send(Encoding.Unicode.GetBytes(this.UserName.Text + "离开了房间!\n")); 99 ClientSocket.Shutdown(SocketShutdown.Both);100 ClientSocket.Disconnect(false);101 }102 ClientSocket.Close();103 104 this.CmdSend.Enabled = false;105 this.CmdEnter.Enabled = true;106 this.CmdExit.Enabled = false;107 }108 109 private void RecieveMsg_TextChanged(object sender, EventArgs e)110 {111 this.RecieveMsg.ScrollToCaret();112 }113 114 private void SendMsg_KeyDown(object sender, KeyEventArgs e)115 {116 if (e.Control && e.KeyValue == 13)117 {118 e.Handled = true;119 this.CmdSend_Click(this, null);120 }121 }122 123 124 125 126 }127 }//服务端 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 9 using System.Net; 10 using System.Net.Sockets; 11 using System.Threading; 12 using System.Xml; 13 14 namespace Server 15 { 16 public partial class ServerMain : Form 17 { 18 public ServerMain() 19 { 20 InitializeComponent(); 21 } 22 23 private void ServerMain_Load(object sender, EventArgs e) 24 { 25 this.CmdStar.Enabled = true; 26 this.CmdStop.Enabled = false; 27 } 28 29 private void 配置参数ToolStripMenuItem_Click(object sender, EventArgs e) 30 { 31 Set TSet = new Set(); 32 TSet.ShowDialog(); 33 } 34 35 private void 关于ToolStripMenuItem_Click(object sender, EventArgs e) 36 { 37 About TAbout = new About(); 38 TAbout.Show(); 39 } 40 /// <summary> 41 /// 获得XML文件中的端口号 42 /// </summary> 43 /// <returns></returns> 44 private int GetPort() 45 { 46 try 47 { 48 XmlDocument TDoc = new XmlDocument(); 49 TDoc.Load("Settings.xml"); 50 string TPort = TDoc.GetElementsByTagName("ServerPort")[0].InnerXml; 51 return Convert.ToInt32(TPort); 52 53 } 54 catch { return 6600; }//默认是6600 55 } 56 57 //声明将要用到的类 58 private IPEndPoint ServerInfo;//存放服务器的IP和端口信息 59 private Socket ServerSocket;//服务端运行的SOCKET 60 private Thread ServerThread;//服务端运行的线程 61 private Socket[] ClientSocket;//为客户端建立的SOCKET连接 62 private int ClientNumb;//存放客户端数量 63 private byte[] MsgBuffer;//存放消息数据 64 65 private void CmdStar_Click(object sender, EventArgs e) 66 { 67 ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 68 ServerInfo=new IPEndPoint(IPAddress.Any,this.GetPort()); 69 ServerSocket.Bind(ServerInfo);//将SOCKET接口和IP端口绑定 70 ServerSocket.Listen(10);//开始监听,并且挂起数为10 71 72 ClientSocket = new Socket[65535];//为客户端提供连接个数 73 MsgBuffer = new byte[65535];//消息数据大小 74 ClientNumb = 0;//数量从0开始统计 75 76 ServerThread = new Thread(RecieveAccept);//将接受客户端连接的方法委托给线程 77 ServerThread.Start();//线程开始运行 78 79 CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用 80 81 this.CmdStar.Enabled = false; 82 this.CmdStop.Enabled = true; 83 this.StateMsg.Text = "服务正在运行"+" 运行端口:"+this.GetPort().ToString(); 84 this.ClientList.Items.Add("服务于 " + DateTime.Now.ToString() + " 开始运行."); 85 } 86 87 //接受客户端连接的方法 88 private void RecieveAccept() 89 { 90 while (true) 91 { 92 ClientSocket[ClientNumb] = ServerSocket.Accept(); 93 ClientSocket[ClientNumb].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack),ClientSocket[ClientNumb]); 94 this.ClientList.Items.Add(ClientSocket[ClientNumb].RemoteEndPoint.ToString()+" 成功连接服务器."); 95 ClientNumb++; 96 } 97 } 98 99 //回发数据给客户端100 private void RecieveCallBack(IAsyncResult AR)101 {102 try103 {104 Socket RSocket = (Socket)AR.AsyncState;105 int REnd = RSocket.EndReceive(AR);106 for (int i = 0; i < ClientNumb; i++)107 {108 if (ClientSocket[i].Connected)109 {110 ClientSocket[i].Send(MsgBuffer, 0, REnd,0);111 }112 RSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), RSocket);113 114 }115 }116 catch { }117 118 }119 120 private void CmdStop_Click(object sender, EventArgs e)121 {122 ServerThread.Abort();//线程终止123 ServerSocket.Close();//关闭SOCKET124 125 this.CmdStar.Enabled = true;126 this.CmdStop.Enabled = false;127 this.StateMsg.Text = "等待运行";128 this.ClientList.Items.Add("服务于 " + DateTime.Now.ToString() + " 停止运行.");129 }130 131 132 133 }134 }
[解决办法]
这里很多,很多。。。
http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html
[解决办法]
服务器
- C# code
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.IO;using System.Net.Sockets;using System.Threading;using System.Net;namespace socket{ public partial class Form1 : Form { private Socket s; private Thread th; private Thread thread; public Socket cSocket; public NetworkStream ns; public StreamWriter sw; public StreamReader sr; private delegate void SetTextCallback(); public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } public void Communication() { while (true) { cSocket = s.Accept(); try { if (cSocket.Connected) { ns = new NetworkStream(cSocket); sr = new StreamReader(ns); sw = new StreamWriter(ns); string str = sr.ReadLine(); sw.WriteLine(str); sw.Flush(); } else { MessageBox.Show("连接失败!"); break; } } catch (SocketException se) { MessageBox.Show(se.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } private void button1_Click(object sender, EventArgs e) { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress serverIP = IPAddress.Parse(IP地址); IPEndPoint server = new IPEndPoint(serverIP, 13); s.Bind(server); s.Listen(10); try { th = new Thread(new ThreadStart(Communication)); th.Start(); } catch(Exception ex) { MessageBox.Show(ex.Message); } } }}