windows图形编程与socket编程

linux下socket编程(服务器端)

流程1:添加socket监听

int listenfd=socket(AF_INET,SOCK_STREAM,0);
//AF_INET:address family_internet(地址族网络)
//SOCK_STREAM:socket_stream(SOCKET流)
//0:一般都写0

流程2:注册sockaddr_in

由于socketaddr_in的内存分配较socketaddr好所以使用sockaddr_in声明变量使用时可以将sockaddr_in强转乘sockaddr
htonl可以将数字转换成大端存储的方式,因为正常输入的方式为小端。如0x12345678转换后为0x78563412

long htonl(long n){
	return (n<<24)|((n<<8)&0x00FF0000|(n>>8)&0x0000FF00|(n>>24&0x000000FF));
}

由于部分linux机器下0x12345678<<24的结果可能是0x78123456但window下的结果一定是0x78000000所以为了安全起见需要:

long htonl(long n){
	return (n<<24&0xFF000000)|((n<<8)&0x00FF0000|(n>>8)&0x0000FF00|(n>>24&0x000000FF));
}
socketaddr_in sockaddr;
sockaddr_in sockaddr;
memset(&sockaddr,0,sizeof(sockaddr));
sockaddr.sin_addr.s_addr=htonl(INADDR_ANY);
sockaddr.sin_family=AF_INET;
sockaddr.sin_port=htonl(atoi(argv[1]));

流程3:bind绑定

bind(listenfd,(struct sockaddr*)&sockaddr,sizeof(sockaddr));

流程4:设置为监听模式

listen(listenfd,0);

流程5:接受客户端连接

int clientlen;
int clientfd=accept(listenfd,(struct sockaddr*)sockaddr,(socklen_t*)&clientlen);

流程6:send发送

char buffer[1<<10];
send(clientfd,buffer,strlen(buffer),0);

流程7:recv接受

recv(clientfd,buffer,sizeof(buffer),0);

对于异常的情况会返回-1(send,recv可能会返回0),可能通过perror(" ")打印出来

图形编程

//设置光标位置
void pos(int x,int y)
{
    COORD posPoint = {x,y}; //设置坐标
    SetConsoleCursorPosition(hOut,posPoint);
}
void blue_border()//蓝色字体
{
    WORD blue=FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN;//设置字
    体颜色、背景颜色
    SetConsoleTextAttribute(hOut,blue);//字体样式
}
void white_back()//还原亮白色字体
{
    WORD white=FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY;
    SetConsoleTextAttribute(hOut,white);
}
void cyan_choose()//青色字体
{
    WORD cyan=FOREGROUND_GREEN|FOREGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE;
    SetConsoleTextAttribute(hOut,cyan);
}
void on_Select()//被选中时的样式
{
    WORD select=FOREGROUND_GREEN|FOREGROUND_INTENSITY|BACKGROUND_RED;
    SetConsoleTextAttribute(hOut,select);
}
void onChoose(int x,int y)//确定所选中的位置
{
    if(x==25&&y==10)
    {
        on_Select();
        cout<<"1. 开始 ";
    }
    else if(x==25&&y==20)
    {
        on_Select();
        cout<<"3. 继续 ";
    }
    else if(x==65&&y==10)
    {
        on_Select();
        cout<<"2. 选择 ";
    }
    else if(x==65&&y==20)
    {
        on_Select();
        cout<<"4. 退出 ";
    }
}
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出句柄
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾海、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值