如何在C#中通过套接字发送字符串

10

我正在本地测试,所以要连接的IP可以是localhost或127.0.0.1

发送后会收到一个字符串,这也会很方便。


7
你尝试了什么?哪些方法没有奏效?展示你对该主题进行了一些研究。 - user703016
当然。 我在微软网站上查了一些东西,它给了我相当多的代码块。 理论上来说,它应该可以工作,但我的服务器端告诉我没有连接。(这是用Java制作的,但这不应该有关系,对吧?) 这就是我的代码:http://pastebin.com/ANy7Jcu2 - Lolmewn
刚刚看到这个,它是谷歌的第一个链接:http://www.developerfusion.com/article/3918/socket-programming-in-c-part-1/ - evasilchenko
他们添加了源代码,太好了,现在我正在查看它。我之前找到过它,但出现了一些错误。不过没有看到源代码链接 :) - Lolmewn
现在正常运行了,我稍后会发布答案。 - Lolmewn
2个回答

22
Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(server);
System.Net.IPEndPoint remoteEP = new IPEndPoint(ipAdd, 3456);
soc.Connect(remoteEP);

连接它的方法。 发送数据:

//Start sending stuf..
byte[] byData = System.Text.Encoding.ASCII.GetBytes("un:" + username + ";pw:" + password);
soc.Send(byData);

而对于读取回来的情况...

byte[] buffer = new byte[1024];
int iRx = soc.Receive(buffer);
char[] chars = new char[iRx];

System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
System.String recv = new System.String(chars);

2
请注意,套接字中没有分隔符,因此发送0123456789可能会导致需要读取一次、两次、三次……即一天读取0123,然后是456789,另一天读取01234567和89,不同的尝试中可能会读取0123456789。数据越大,读取时被分割的可能性就越大。 - GeoffM
2
是否有任何原因导致使用“127.0.0.1”时soc.Connect(remoteEP);连接失败,并显示“无法建立连接,因为目标计算机积极拒绝了连接”? - user2852171
出现“主动拒绝”的消息的唯一原因可能是套接字未打开以进行侦听,或者软件防火墙可能正在阻止它。 - ArnaldoRivera

2
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAdd = System.Net.IPAddress.Parse(m_ip);
IPEndPoint remoteEP = new IPEndPoint(ipAdd, m_port);

socket.Connect(remoteEP);

byte[] byData = System.Text.Encoding.ASCII.GetBytes("Message");
socket.Send(byData);


socket.Disconnect(false);
socket.Close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接