[C] 纯文本查看 复制代码#include
#include
#include
#include
#include
#include
#include
#include"Statement.h"
#define oops(msg) {perror(msg);exit(1);}
void makeServerAddr(struct sockaddr_in *addr,char *hostname,char *port);
void packInfo(MSGSTRUCT *msg,char info[],int cNum);
int main(int agc,char *agv[])
{
if(agc!=4)
{
printf("use ./ClientFive name port clientId\n");
exit(1);
}
struct sockaddr_in servadd;
int sock_id;
char info[BUFSIZ];
int infolen;
sock_id=socket(AF_INET,SOCK_STREAM,0);
if(sock_id==-1)
{
oops("socket");
}
makeServerAddr(&servadd,agv[1],agv[2]);
if(connect(sock_id,(struct sockaddr *)&servadd,sizeof(servadd))!=0)
oops("connect");
//printf("sock_id=%d\n",sock_id);
//
//send info to server
printf("please input your info\n");
MSGSTRUCT msg;
char receBuf[BUFSIZ];
while(1)
{
memset(info,'\0',strlen(info));
memset(&msg,'\0',sizeof(msg));
fgets(info,BUFSIZ,stdin);
//packing cllient info
packInfo(&msg,info,atoi(agv[3]));
//send msg
if(write(sock_id,&msg,sizeof(MSGSTRUCT))!=sizeof(MSGSTRUCT))
{
oops("write")
}
//receve msg
read(sock_id,receBuf,BUFSIZ);
printf("\t\tserver:%s\n",receBuf);
}
return 0;
}
void makeServerAddr(struct sockaddr_in *addr,char *hostname,char *port)
{
bzero(addr,sizeof(struct sockaddr_in));
struct hostent *hp;
hp=gethostbyname(hostname);
if(hp==NULL)
{
oops(hostname);
}
bcopy(hp->h_addr,(struct sockaddr *)&(addr->sin_addr),hp->h_length);
// inet_pton(AF_INET,hostname,&(addr->sin_addr));
// inet_pton(AF_INET,"127.0.0.1",&(addr->sin_addr));
addr->sin_port=htons(atoi(port));
addr->sin_family=AF_INET;
}
void packInfo(MSGSTRUCT *msg,char info[],int cNum)
{
char *type=NULL;
int typeNum=0;
char *msgInfo=NULL;
type=strtok(info,";");
typeNum=atoi(type);
printf("type=%d",typeNum);
msg->clientNum=cNum;
switch(typeNum)
{
//落字消息
case 1:
msg->msgType=1;
msg->x=1;
msg->y=2;
break;
//和棋消息
case 2:
msg->msgType=2;
break;
//同意和棋
case 3:
msg->msgType=3;
break;
//拒绝和棋
case 4:
msg->msgType=4;
break;
//聊天消息
case 5:
msg->msgType=5;
strcpy(&(msg->byMsg),strtok(NULL,";"));
break;
default:
perror("input message type is error!\n");
exit(1);
}
}
该博客介绍了如何使用C语言实现一个客户端程序,通过socket通信连接到指定服务器,接收并发送带有不同类型信息的客户端数据,如聊天消息和棋局操作。重点在于服务器地址解析、信息打包和错误处理。

5775

被折叠的 条评论
为什么被折叠?



