交作业,急,多谢帮忙

wuwei419 2003-06-02 10:23:45
题目让用winsock数据报通信方式实现server和client的通信,小弟根本没学过此方面的知识,哪位大虾能帮忙介绍一下winsock相应的数据结构和函数,只介绍用到的就行,如果有基本流程最好,谢谢了。(不用mfc)
...全文
23 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenfuhua 2003-06-03
  • 打赏
  • 举报
回复
不要偷懒哦。好好看弄懂
tserpent 2003-06-03
  • 打赏
  • 举报
回复
//server
#include <stdio.h>
#include <winsock.h>
#include <windows.h>

#define SERVER_SOCKET_ERROR 1
#define SOCKET_OK 0

#pragma comment(lib, "wsock32.lib")

void socketError(char*);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShow)
{
WORD sockVersion;
WSADATA wsaData;
int rVal;

sockVersion = MAKEWORD(1,1);
//start dll
WSAStartup(sockVersion, &wsaData);

//create socket
SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

if(s == INVALID_SOCKET)
{
socketError("Failed socket()");
WSACleanup();
return SERVER_SOCKET_ERROR;
}

//fill in sockaddr_in struct

SOCKADDR_IN sin;
sin.sin_family = PF_INET;
sin.sin_port = htons(8888);
sin.sin_addr.s_addr = INADDR_ANY;

//bind the socket
rVal = bind(s, (LPSOCKADDR)&sin, sizeof(sin));
if(rVal == SOCKET_ERROR)
{
socketError("Failed bind()");
WSACleanup();
return SERVER_SOCKET_ERROR;
}

//get socket to listen
rVal = listen(s, 2);
if(rVal == SOCKET_ERROR)
{
socketError("Failed listen()");
WSACleanup();
return SERVER_SOCKET_ERROR;
}

//wait for a client
SOCKET client;

client = accept(s, NULL, NULL);

if(client == INVALID_SOCKET)
{
socketError("Failed accept()");
WSACleanup();
return SERVER_SOCKET_ERROR;
}

//close process
closesocket(client);
closesocket(s);

WSACleanup();

return SOCKET_OK;
};

void socketError(char* str)
{
MessageBox(NULL, str, "SOCKET ERROR", MB_OK);
};


//clent
#include <windows.h>
#include <winsock.h>

#pragma comment(lib, "wsock32.lib")

#define CS_ERROR 1
#define CS_OK 0

void sError(char*);

int WINAPI WinMain(HINSTANCE hHinst, HINSTANCE hPrevHinst, LPSTR lpCmdLine,
int nShow)
{

WORD version;
WSADATA wsaData;
int rVal=0;

version = MAKEWORD(1,1);

WSAStartup(version,(LPWSADATA)&wsaData);

LPHOSTENT hostEntry;

//store information about the server
hostEntry = gethostbyname("hibbert");

if(!hostEntry)
{
sError("Failed gethostbyname()");
//WSACleanup();
return CS_ERROR;
}

//create the socket
SOCKET theSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

if(theSocket == SOCKET_ERROR)
{
sError("Failed socket()");
return CS_ERROR;
}

//Fill in the sockaddr_in struct
SOCKADDR_IN serverInfo;

serverInfo.sin_family = PF_INET;
serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);

serverInfo.sin_port = htons(8888);

rVal=connect(theSocket,(LPSOCKADDR)&serverInfo, sizeof(serverInfo));
if(rVal==SOCKET_ERROR)
{
sError("Failed connect()");
return CS_ERROR;
}

closesocket(theSocket);
WSACleanup();
MessageBox(NULL, "Connection was made", "SOCKET", MB_OK);
return CS_OK;
}

void sError(char *str)
{
MessageBox(NULL, str, "SOCKET ERROR", MB_OK);
WSACleanup();
}
wuwei419 2003-06-03
  • 打赏
  • 举报
回复
3x,看得差不多,可是我看得好象这是基于连接的,作业要求用无连接的数据报形式,能在帮忙讲讲吗?

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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