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();
}
}
}