socket 新手提问,高分回报

NetFish416 2006-10-26 01:33:28
哪位高手能写个在DOS下面的客户端和服务器端,实现的功能为:客户端能向服务器端发送一个字符串,而服务器端只要在接受后显示这个字符串就行了,
不知哪位高手能贴出代码呀,多谢了~~~~
...全文
182 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
NetFish416 2006-10-26
  • 打赏
  • 举报
回复
就是的哈,晕哦,
多谢了哈
Seu_why 2006-10-26
  • 打赏
  • 举报
回复
ClientAddrLen没有初始化大小
Seu_why 2006-10-26
  • 打赏
  • 举报
回复
ClientAddrLen=sizeof(SOCKADDR); //错在这
NetFish416 2006-10-26
  • 打赏
  • 举报
回复
客户端运行的结果是
connect true!
send 10;

但是服务器端的结果一直是
we are awaiting a connect on port 5150
我认为既然客户端都连接上了,服务器端就应该出现"right"
NetFish416 2006-10-26
  • 打赏
  • 举报
回复
client:

#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"wsock32.lib")

void main()
{
WSADATA wsaData;
SOCKET s;
SOCKADDR_IN ServerAddr;
int Port = 5150;
int Ret;
char sendbuff[10];

for(int i=0;i<10;i++)
sendbuff[10] = i;

if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)
{
printf("WSAStartup failed with error %d\n", Ret);
return;
}

if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))
== INVALID_SOCKET)
{
printf("socket failed with error %d\n", WSAGetLastError());
WSACleanup();
return;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.s_addr = inet_addr("192.168.0.36");


if (connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr))
== SOCKET_ERROR)
{
printf("connect failed with error %d\n", WSAGetLastError());
closesocket(s);
WSACleanup();
return;
}
printf("connect true!\n");
Ret = send(s,sendbuff,10,0);
if(Ret<=0)
{
printf("Send error");

}
printf("send %d\n",Ret);


closesocket(s);
WSACleanup();
}
NetFish416 2006-10-26
  • 打赏
  • 举报
回复
那请你看看我的代码那里错误:

//server


#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"wsock32.lib")

void main(void)
{
WSADATA wsaData;
SOCKET ListeningSocket;
SOCKET NewConnection;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN ClientAddr;
int ClientAddrLen;
int Port = 5150;
int Ret;
char DataBuffer[10];


if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)
{
printf("WSAStartup failed with error %d\n", Ret);
return;
}

if ((ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))
== INVALID_SOCKET)
{
printf("socket failed with error %d\n", WSAGetLastError());
WSACleanup();
return;
}

ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr))
== SOCKET_ERROR)
{
printf("bind failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}

if (listen(ListeningSocket, 5) == SOCKET_ERROR)
{
printf("listen failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}

printf("We are awaiting a connection on port %d.\n", Port);


while (true)
{
if((NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,&ClientAddrLen)) != INVALID_SOCKET)
printf("Rigth!");

}

closesocket(NewConnection);
WSACleanup();
}
star119119 2006-10-26
  • 打赏
  • 举报
回复
采用什么协议?

tcp/udp/atm/...

不过大致步骤是

无论服务器客户机都要WSAStartup

server: 创建socket bind recv
client: 创建socker sendto (有个结构需要自己填充。里面包括目标机信息SOCKADDR_IN)
Seu_why 2006-10-26
  • 打赏
  • 举报
回复
http://www.codeproject.com/internet/#Client%2FServer+Development
http://www.codeproject.com/internet/server_client_sockets.asp
Seu_why 2006-10-26
  • 打赏
  • 举报
回复
Client :

#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>

int main()
{
////////////////
// Initialize windows sockets API. Ask for version 1.1
//
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
}
SOCKET sClient;

struct timeval time1,time2;
SYSTEMTIME timeold,timenew;
time1.tv_sec=60;
time1.tv_usec=0;
time2.tv_sec=15;
time2.tv_usec=0;
DWORD DataPacketLen=0;

WSADATA wsd;
struct sockaddr_in server;
char buff[10];
buff[1]='a';
buff[2]='b';
sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient==SOCKET_ERROR)
{
}
server.sin_family=AF_INET;
server.sin_port=htons(9000);
server.sin_addr.s_addr=inet_addr("127.0.0.1");//必须是IP地址



if(SOCKET_ERROR==connect(sClient,(struct sockaddr *)&server,sizeof(server)))
{
printf("连接失败!");
}

char recvBuf[100];
recv(sClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sClient,"one client join in",strlen("one client join in")+1,0);

closesocket(sClient);
WSACleanup();

return 0;
}
aspnetwuxueyou 2006-10-26
  • 打赏
  • 举报
回复
On server side
1. create listening socket using WSASocket
2. bind
3. listen
4. WSAAccept
Seu_why 2006-10-26
  • 打赏
  • 举报
回复
Server :


#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>

int main()
{
////////////////
// Initialize windows sockets API. Ask for version 1.1
//
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
}

SOCKET sockSrv;

struct timeval time1,time2;
SYSTEMTIME timeold,timenew;
time1.tv_sec=60;
time1.tv_usec=0;
time2.tv_sec=15;
time2.tv_usec=0;
DWORD DataPacketLen=0;

WSADATA wsd;
struct sockaddr_in server;

char buff[10];
for(int j =0;j<10;j++)
buff[j]=0;
sockSrv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sockSrv==SOCKET_ERROR)
{
}
server.sin_family=AF_INET;
server.sin_port=htons(9000);
server.sin_addr.s_addr=inet_addr("127.0.0.1");//必须是IP地址

if(SOCKET_ERROR==bind(sockSrv,(SOCKADDR*)&server,sizeof(SOCKADDR)))
{
printf("绑定失败!");
}
else
{
printf("绑定成功\n");
}
listen(sockSrv,5);

printf("listen...\n");

SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while (1) {
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"this is a test",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);
}
WSACleanup();
return 0;
}
aspnetwuxueyou 2006-10-26
  • 打赏
  • 举报
回复
See iocp sample in platfrom SDK
NetFish416 2006-10-26
  • 打赏
  • 举报
回复
就是直接调用API函数,关键是我不知道那个无穷循环里面怎么来接受连接
NetFish416 2006-10-26
  • 打赏
  • 举报
回复
是的哦,就是控制台上面运行
trueadou 2006-10-26
  • 打赏
  • 举报
回复
这年头还有人用DOS吗?
楼主是不是想说要个Console程序啊?!

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧