📄 tcpserver.c
字号:
/**********************************************************************
*
* 案例四、TCP服务器(TcpServer.c)
* 描述:接收结构体消息
*
***********************************************************************/
//#pragma pack(1)
#include <assert.h>
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib, "WSOCK32.LIB")
#define PORT 5001
typedef struct TalkMsg
{
unsigned char msgId; //消息号
unsigned int seq; //序列号
unsigned int msglen; //消息长度,最大为1k
char content[1024]; //消息内容
}TalkMsg;
void main()
{
SOCKADDR_IN local_sin;
SOCKADDR_IN client_sin;
int client_sin_len;
TalkMsg msg;
WSADATA WSAData;
SOCKET ls;
SOCKET cs;
//该函数在Winsocket中必须调用
if (WSAStartup(MAKEWORD(1,1), &WSAData) != 0)
{
printf("Call WSAStartup()失败!\n");
return;
}
ls = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if( ls == INVALID_SOCKET)
{
printf("创建套接字失败!\n");
return;
}
memset((char *)&local_sin, 0, sizeof(local_sin)); /* 服务器地址清0 */
local_sin.sin_family = PF_INET;
local_sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
local_sin.sin_port = htons(PORT);
if (bind(ls, (struct sockaddr FAR *) &local_sin, sizeof(local_sin)) == SOCKET_ERROR)
{
printf("绑定套接字失败!\n");
return;
}
if(listen(ls, 1000) == SOCKET_ERROR)
{
printf("Call listen() 失败!\n");
return;
}
client_sin_len = sizeof(client_sin);
cs = accept(ls, (struct sockaddr FAR *)&client_sin, (int FAR *)&client_sin_len );
memset(&msg, 0, sizeof(msg));
recv(cs, &msg, sizeof(msg), 0);
printf("msgId:%d\n", msg.msgId);
printf("seq:%d\n", msg.seq);
printf("msglen:%d\n", msg.msglen);
printf("content:%s\n", msg.content);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -