我正在尝试进入网络编程并一直在遵循套接字指南。我用 C 语言编写了一个简单的 Windows TCP 服务器和客户端,但似乎无法让它们工作。客户端连接后,服务器会抛出“错误文件描述符”错误并关闭。我不明白刚刚创建的文件描述符怎么accept()
可能是坏的。我对此进行了研究,只发现有人在阅读之前关闭了该文件,而我却没有。
这是代码:
服务器
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
int main(int argc, char *argv[])
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock, newsock;
int portno, clilen;
char buffer[256];
SOCKADDR_IN serv_addr, cli_addr;
int n;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
perror("Error opening socket");
exit(1);
}
memset((char *) &serv_addr, 0, sizeof(serv_addr));
portno = 5001;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sock, (SOCKADDR *) &serv_addr, sizeof(serv_addr)) < 0)
{ …
Run Code Online (Sandbox Code Playgroud) 我最近开始学习OpenGL,并编写了一些代码来在SDL窗口中绘制一个简单的白色三角形.我已经阅读并重新阅读了我的代码,并且已经根据几个opengl教程中提出的内容进行了检查,但我无法使其工作.我知道opengl正确绑定到SDL,因为我可以使用glClearColor更改窗口背景颜色,但我无法显示该darn三角形.
我很乐意提供更多信息,但说实话,我不知道问题来自哪里,所以这里是我写的代码:
int init()
{
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
fprintf(stderr, "SDL error : %s\n", SDL_GetError());
SDL_Quit();
return -1;
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
gWindow = SDL_CreateWindow("Test OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINWIDTH, WINHEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
if (gWindow == NULL)
{
fprintf(stderr, "Failed to create window. SDL error : %s\n", SDL_GetError());
SDL_Quit();
return -1;
}
gGLContext = SDL_GL_CreateContext(gWindow);
if (gGLContext == 0)
{
fprintf(stderr, "Failed to create OpenGL context. SDL error : %s\n", SDL_GetError());
SDL_DestroyWindow(gWindow);
SDL_Quit();
return -1; …
Run Code Online (Sandbox Code Playgroud)