首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

socket编程 不是很难 有关问题解决立即结分

2012-09-07 
socket编程不是很难 问题解决立即结分~为了实现服务器与多个客户机通信但是现在问题是每个客户机只能发送

socket编程 不是很难 问题解决立即结分~
为了实现服务器与多个客户机通信 但是现在问题是每个客户机只能发送一次信息 到第二次发送的时候就不行了 而且在显示方面也又问题但不知道是哪里出错了 找了半天妹看出来 麻烦那个老大帮我看下 感激涕零~
[code=C#][/code]
//客户机代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace TcpClient
{
  public class TcpClientService
  {
  public string message;
  public byte[] buffer=new byte[1024];
  public TcpClientService()
  { 
  Socket clientService=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  IPAddress address=IPAddress.Parse("127.0.0.1");
  IPEndPoint IPEP=new IPEndPoint(address,13000);
  clientService.Connect(IPEP);
  //if (clientService.Connected)
  //{
  Console.WriteLine("连接已建立.......");
  while (true)
  {
  Console.Write("请输入要传输的信息");
  message = Console.ReadLine();
  if (message == "exit")
  {
  break;
  }
  else
  {
  buffer = Encoding.ASCII.GetBytes(message);
  clientService.Send(buffer);
  int i = clientService.Receive(buffer);
  message = Encoding.ASCII.GetString(buffer, 0, i);
  Console.WriteLine("收到回复信息:{0}", message);
  }
  }
  clientService.Close();
  Console.WriteLine("连接断开");
  //}
  }
  public static void Main()
  {
  TcpClientService Tcp = new TcpClientService();
  }
  }
}
[code=C#][/code]
//服务器代码
namespace TcpService
{
  public class TcpServiceServer
  {
  public Socket service;
  public TcpServiceServer()
  {
  Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  IPAddress address = IPAddress.Parse("127.0.0.1");
  IPEndPoint IPEP = new IPEndPoint(address, 13000);
  socket.Bind(IPEP);
  socket.Listen(20);
  Console.WriteLine("等待客户机连接......");
  while (true)
  {
  service = socket.Accept();
  TcpService tcp = new TcpService(service);
  Thread thread = new Thread(new ThreadStart(tcp.tcpService));
  thread.Start();
  }
  }
  public static void Main()
  {
  TcpServiceServer Service = new TcpServiceServer();
  }
  }
  public class TcpService
  {
  public Socket service;
  public int connection = 0;
  public string message;
  public byte[] buffer = new byte[1024];
  public TcpService(Socket service)
  {
  this.service = service;
  }
  public void tcpService()
  {
  if (service != null)
  {
  connection++;
  }
  Console.WriteLine("现在共有{0}个连接", connection);


  int i = service.Receive(buffer);
  while (i != 0)
  {
  message = Encoding.ASCII.GetString(buffer, 0, i);
  Console.WriteLine("收到信息:{0}", message);
  message = message.ToUpper();
  service.Send(Encoding.ASCII.GetBytes(message));
  Console.WriteLine("发出信息:{0}", message);
  }
  service.Close();
  connection--;
  Console.WriteLine("现在共有{0}个连接", connection);
  }
  }
}


[解决办法]
另外,你这个做法非常的不好~~建议找个良好的源码看看
[解决办法]
断开连接清空一下 第二次发送再连接一次
用线程 sleep一下
[解决办法]
//服务器代码 
namespace TcpService 

public class TcpServiceServer 

//public Socket service; //这里错了
public TcpServiceServer() 

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPAddress address = IPAddress.Parse("127.0.0.1"); 
IPEndPoint IPEP = new IPEndPoint(address, 13000); 
socket.Bind(IPEP); 
socket.Listen(20); 
Console.WriteLine("等待客户机连接......"); 
while (true) 

Socket service; //改到这里
service = socket.Accept(); 
TcpService tcp = new TcpService(service); 
Thread thread = new Thread(new ThreadStart(tcp.tcpService)); 
thread.Start(); 


public static void Main() 

TcpServiceServer Service = new TcpServiceServer(); 

}
[解决办法]
我给你一个关于socket编程的pdf教材文件,你慢慢学吧
[解决办法]
服务器需要多线程的或异步的
客户端在发送和接受数据也要用线程

建议去csdn下载里找找源码
[解决办法]
可扩展多线程异步Socket服务器框架EMTASS 2.0
[解决办法]
改好了。。。
服务器:
using System.Net.Sockets;
using System.Net;
using System;
using System.Threading;
using System.Text;
namespace TcpService
{
public class TcpServiceServer
{

public TcpServiceServer()
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint IPEP = new IPEndPoint(address, 13000);
socket.Bind(IPEP);
socket.Listen(20);
Console.WriteLine("等待客户机连接......");
Socket service;
service = socket.Accept();
while (true)
{
TcpService tcp = new TcpService(service);
Thread thread = new Thread(new ThreadStart(tcp.tcpService));
thread.Start();
Console.WriteLine("thread.Start");
thread.Join();
}
}
public static void Main()
{
TcpServiceServer Service = new TcpServiceServer();


}
}
public class TcpService
{
public Socket service;
public int connection = 0;
public string message;
public byte[] buffer = new byte[1024];
public TcpService(Socket service)
{
this.service = service;
}
public void tcpService()
{
if (service != null)
{
connection++;
}
Console.WriteLine("现在共有{0}个连接", connection);
int i = service.Receive(buffer);
Console.WriteLine("收到信息:{0}",i.ToString());
// while (i != 0)
// {
message = Encoding.ASCII.GetString(buffer, 0, i);
Console.WriteLine("收到信息:{0}", message);
message = message.ToUpper();
service.Send(Encoding.ASCII.GetBytes(message));
Console.WriteLine("发出信息:{0}", message);
// }

connection--;
Console.WriteLine("现在共有{0}个连接", connection);

}
}
}

客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace TcpClient
{
public class TcpClientService
{
public string message;
public byte[] buffer = new byte[1024];
public TcpClientService()
{
Socket clientService = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint IPEP = new IPEndPoint(address, 13000);
clientService.Connect(IPEP);
//if (clientService.Connected) 
//{ 
Console.WriteLine("连接已建立.......");
while (true)
{
Console.Write("请输入要传输的信息");
message = Console.ReadLine();
if (message == "exit")
{
break;
}
else
{
buffer = Encoding.ASCII.GetBytes(message);
clientService.Send(buffer);
try
{
int i = clientService.Receive(buffer);
message = Encoding.ASCII.GetString(buffer, 0, i);
Console.WriteLine("收到回复信息:{0}", message);

}
catch( Exception e)
{ Console.WriteLine("error{0}", e.ToString()); }
}
}
clientService.Close();
Console.WriteLine("连接断开");
//} 
}
public static void Main()
{
TcpClientService Tcp = new TcpClientService();
}
}
}

热点排行