C#如何显示出socket发送内容

如题如何在服务器上显示出目前在线的客户端同时如果客户端发送一个信息(因为不是局域网所以我用的是TCP协议)比如byte[]数组。如何接收到此信息立即显示出来我的服务器端代... 如题 如何在服务器上显示出目前在线的客户端 同时如果客户端发送一个信息(因为不是局域网所以我用的是TCP协议)比如byte[]数组。如何接收到此信息立即显示出来
我的服务器端代码
============================================================
private void startServer()
{
//创建一个网络终结点 IP+端口号
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,int.Parse("9527"));
MessageBox.Show("IP地址为:"+IPAddress.Any);

//创建一个套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(ipep);//绑定终结点
server.Listen(10);//开始监听
Socket linkclient = server.Accept();
}
===========================================================
客户端代码
private void Bt_Send_Click(object sender, EventArgs e)
{ byte[] sendstring = System.Text.Encoding.Default.GetBytes(this.textBox1 .Text .Trim());
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse("9527"));
Socket client=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
client.Connect(ipep);
client.SendTo(sendstring ,ipep);
}
展开
 我来答
zjloveql
2009-07-03 · 超过28用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:93.2万
展开全部
startServer()只是构建服务器然后启动监听。

但你没有对监听到得连接进行处理啊?

socket.BeginReceive()这个方法是异步接受消息的。参数中有个byte[]。意思就是将接收到的消息放入该byte[]中。然后将byte[]转成字符串输入就可以了

本人自建一个程序爱好者论坛。望广大程序爱好者捧场。我们一起交流一起学习
地址:www.coosobar.com
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祚胤17
2009-07-04 · TA获得超过786个赞
知道大有可为答主
回答量:1149
采纳率:82%
帮助的人:319万
展开全部
1.简单服务器
//#include <winsock2.h>
//#pragma comment(lib,"WS2_32.lib")
WSADATA wsd;
static UINT port=%%1;
UINT Listen(LPVOID pParam)
{
SOCKET sServer,sClient;
char buf[1024];
int retVal;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return -1;//失败
}
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
WSACleanup();
return -1;//创建套接字失败
}
SOCKADDR_IN addrServ;
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons((short)pParam);
addrServ.sin_addr.s_addr=INADDR_ANY;
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
WSACleanup();
return -1;//绑定套接字失败
}
retVal=listen(sServer,1);
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
WSACleanup();
return -1;//开始监听失败
}
sockaddr_in addrClient;
int addrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);
if(INVALID_SOCKET==sClient)
{
closesocket(sServer);
WSACleanup();
return -1;//开始接受客户端连接失败
}
ZeroMemory(buf,sizeof(buf));
retVal=recv(sClient,buf,sizeof(buf),0);
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
closesocket(sClient);
WSACleanup();
return -1;//接收数据失败
}
CString %%2(buf);
closesocket(sServer);
closesocket(sClient);
WSACleanup();
return 0;
}
CWinThread *pThread=AfxBeginThread(Listen,&port);

2.简单客户端
//#include <winsock2.h>
//#pragma comment(lib,"WS2_32.lib")
WSADATA wsd;
SOCKET sHost;
SOCKADDR_IN servAddr;
char buf[1024];
int retVal;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return -1;//失败
}
sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sHost)
{
WSACleanup();
return -1;//创建套接字失败
}
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(%%3);
servAddr.sin_port=htons((short)%%2);
int nServAddlen=sizeof(servAddr);
retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
if(SOCKET_ERROR==retVal) {
closesocket(sHost);
WSACleanup();
return -1;//连接服务器失败
}
ZeroMemory(buf,sizeof(buf));
strcpy(buf,%%3);
retVal=send(sHost,buf,sizeof(buf),0);
if(SOCKET_ERROR==retVal)
{
closesocket(sHost);
WSACleanup();
return -1;//向服务器发送数据失败
}
closesocket(sHost);
WSACleanup();

3.获得本机IP
//#include <winsock2.h>
//#pragma comment(lib,"WS2_32.lib")
WSADATA wsd;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return -1;//失败
}
char szHostname[100],szHostaddress[200];
if(gethostname(szHostname,sizeof(szHostname))!=SOCKET_ERROR)
{
HOSTENT *pHostEnt=gethostbyname(szHostname);
if(pHostEnt!=NULL){
sprintf(szHostaddress,"%d.%d.%d.%d",
( pHostEnt->h_addr_list[0][0]&0x00ff ),
( pHostEnt->h_addr_list[0][1]&0x00ff ),
( pHostEnt->h_addr_list[0][2]&0x00ff ),
( pHostEnt->h_addr_list[0][3]&0x00ff ));
}
}
else
return;
CString %%1(szHostaddress);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MeteorRain_1
2009-07-03 · TA获得超过159个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:206万
展开全部
startServer()只是启动了服务器socket,没有绑定异步IO事件,也没有用同步方法。server.accept()得到linkclient以后,要开启新线程,接收linkclient发来的消息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晋晨涛0fR
2009-07-03 · TA获得超过5816个赞
知道大有可为答主
回答量:6091
采纳率:100%
帮助的人:0
展开全部
先加分,我帮你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hake303
2009-07-08
知道答主
回答量:23
采纳率:0%
帮助的人:22.1万
展开全部
服务端代码加上下面代码:
clientsocket = linkclient;
clientservice = new Thread(new ThreadStart(ServiceClient));
clientservice.Start();

private void ServiceClient()
{
Socket client = clientsocket;
bool keepalive = true;
Byte[] buffer = new Byte[1024];

while(keepalive)
{
bufLen = client.Available;
client.Receive(buffer, 0, bufLen, SocketFlags.None);
if (bufLen == 0)
continue;
string clientcommand = Encoding.Default.GetString(buffer).Substring(0, bufLen).Trim();
Console.WriteLine(clientcommand);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式