【求助】关于socket的问题~!求大家帮我下
这是客户端代码:
using System ;
using System .Text ;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace SocketClient
{
class client
{
private static byte[] result = new byte[1024];
static void Main(string[] args)
{
//设定服务器IP地址
IPAddress ip = IPAddress.Parse("127.0.0.1");
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(new IPEndPoint(ip, 8080)); //配置服务器IP与端口
Console.WriteLine("连接服务器成功");
}
catch
{
Console.WriteLine("连接服务器失败,请按回车键退出!");
return;
}
//通过clientSocket接收数据
//int receiveLength = clientSocket.Receive(result);
//Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));
byte[] bytes = new byte[1024];
String input;
while (true) {
input = Console .ReadLine ();
bytes = Encoding .ASCII .GetBytes (input);
clientSocket .Send(bytes);
if(input == "exit"){
break ;
}
}
}
}
}
socket
using System;
using System .Net .Sockets ;
using System .Net ;
using System .Text ;
using System .Threading ;
using System.Collections;
namespace SocketServer{
public class unitysocket {
private static Socket soc ;
private static byte[] buffer = new byte[1024];
static void Main(string[] args){
IPAddress ip = IPAddress.Parse ("127.0.0.1");
IPEndPoint ipep = new IPEndPoint (ip, 8080);
soc = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
soc.Bind (ipep);
soc.Listen (10);
Thread thread = new Thread (new ThreadStart (Redata));
thread .Start ();
}
//接受数据
static void Redata(){
Socket s = soc ;
while(true){
try{
s.Accept();
int rs = s.Available;
s.Receive(buffer,0,rs,SocketFlags .None );
if(rs == 0){
continue ;
}
string rdata = Encoding .ASCII .GetString(buffer).Substring (0,rs);
Console.WriteLine(rdata );
}catch(Exception e ){
Console.WriteLine(e.ToString());
}
}
}
}
}
端口号8080改成其它的试试看?
[解决办法]
因为s.Accept的时候,给出了一个新的通话用的Socket,你要用这个Socket来接收,而不是用s。
try
{
Socket socket = s.Accept();
while(true)
{
int rs = socket.Receive(buffer, 0, buffer.Length, .None );
...
}