
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);
} 展开
我的服务器端代码
============================================================
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);
} 展开
5个回答
展开全部
startServer()只是构建服务器然后启动监听。
但你没有对监听到得连接进行处理啊?
socket.BeginReceive()这个方法是异步接受消息的。参数中有个byte[]。意思就是将接收到的消息放入该byte[]中。然后将byte[]转成字符串输入就可以了
本人自建一个程序爱好者论坛。望广大程序爱好者捧场。我们一起交流一起学习
地址:www.coosobar.com
但你没有对监听到得连接进行处理啊?
socket.BeginReceive()这个方法是异步接受消息的。参数中有个byte[]。意思就是将接收到的消息放入该byte[]中。然后将byte[]转成字符串输入就可以了
本人自建一个程序爱好者论坛。望广大程序爱好者捧场。我们一起交流一起学习
地址:www.coosobar.com
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
//#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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
startServer()只是启动了服务器socket,没有绑定异步IO事件,也没有用同步方法。server.accept()得到linkclient以后,要开启新线程,接收linkclient发来的消息。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先加分,我帮你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
服务端代码加上下面代码:
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);
}
}
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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询