Tag: sockets

如何拒绝C中的套接字连接?

如果我想接受一个我称之为接受的连接,但我怎么能拒绝连接呢? 在工作套接字echo客户端中,我有这个if语句。 在echo服务器中,如何让echo客户端访问此printf语句? … if (connect(sock, (struct sockaddr *) &server, sizeof(server)) < 0) { printf("Connecting failed\n"); return 1; } …

如何通过UDP CFSocket发送数据包?

我是一个完整的网络新手,但我是ac / c ++程序员,我正在使用objective-c(这是针对OSX / iPhone)。 我正在尝试学习如何使用cfsocket发送带有UDP套接字的魔术包。 我已经看到有像AsyncUDPSocket库这样的库,但是我不想使用它们。 我试图查看苹果UDPecho文件,但作为一个初学者它确实让我困惑。 我用Google搜索了ALOT,我把下面的代码放在一起,我有一个数据包嗅探器正在运行,它没有注册任何被发送的内容。 我理解我的代码缺少很多错误捕获,但我只是想先了解基础知识。 这段代码对吗? (道歉,如果这种接缝含糊不清)我的意思是我错过了代码的某些阶段,例如:CFSocketSetAddress? 如果有人知道任何非常好的教程,它会有所帮助。 非常感谢任何帮助,因为我是一个完整的初学者。 谢谢 int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; CFSocketRef WOLsocket; WOLsocket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL); if ( socket == NULL) { NSLog(@”CfSocketCreate Failed”); }else{ if( socket ) […]

在C套接字编程中刷新套接字流

我想知道在C语言中进行套接字编程时如何刷新套接字流。我尝试了所有选项 – 使用以下代码设置TCP_NODELAY setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); 注意:所有flag和sockfd都被正确声明。 我在send( )之前和send( )之后使用了这个函数,但它没有任何区别。 还有人建议在每个send()之后使用shutdown() ,但这只适用于一个实例。 当我使用它再次发送一些文本时,它不起作用 – 实际上我使用shutdown()后连接被关闭。 shutdown(sockfd, SHUT_WR); 有人可以在这方面提供帮助吗? 我想补充一点 – 服务器是Java套接字,客户端是C套接字。 C套接字实现JVMTI接口并将信息发送到Java套接字。

从sockets读取

我需要使用从C read的函数从AF_UNIX套接字读取到缓冲区,但我不知道缓冲区大小。 我认为最好的方法是读取N个字节,直到读取返回0 (套接字中不再有写入器)。 它是否正确? 有没有办法猜测套接字上写入的缓冲区的大小? 我以为socket是一个特殊的文件。 以二进制模式打开文件并获取大小将有助于我知道给缓冲区的正确大小? 我是C的新手,所以请记住这一点。

套接字选项是否从侦听套接字inheritance到accept()?

假设传递给accept的侦听套接字使用setsockopt在其上设置了非默认选项。 这些选项(部分或全部?)是由接收连接的结果文件描述符inheritance的吗?

绑定返回错误88

我试图用这个绑定套接字: #include #include #include #include #include int main() { int fd,namelen,newfd; struct sockaddr_in sin = {AF_INET}; if(fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==-1) printf(“socket : %d\n”,errno); if(bind(fd,(struct sockaddr *)&sin,sizeof(sin))==-1) printf(“bind : %d\n”,errno); } 那回归“bind:88”,我觉得这意味着ENOTSOCK fd,真的不是套接字吗? 或88不是ENOTSOCK?

在封闭连接上写入不会立即生成sigpipe

我在C上的服务器/客户端遇到了这个问题。如果我在SIGINT之后关闭服务器套接字,然后我尝试从客户端写这个关闭的连接,我要写两次,而不是客户端生成SIGPIPE 。 它不应该立即产生吗? 这是正常行为还是我需要解决的问题? 这是我的代码。 我正在ubuntu上测试一些东西,同样的PC,通过127.0.0.1连接。 server.c sigset_t set; struct sigaction sign; int sock_acc; int sock; void closeSig(){ close(sock_acc); close(sock); exit(1); } int main(){ sigemptyset(&set); sigaddset(&set, SIGINT); sig.sa_sigaction = &closeSig; sig.sa_flags = SA_SIGINFO; sig.sa_mask = set; sigaction(SIGINT, &sig, NULL); //other code to accept the connection from the client sigprocmask(SIG_UNBLOCK, &set, NULL); //write/read calls } client.c […]

套接字编程权限被拒绝

以下代码是TCP服务器程序只是发回“HELLO !!”给客户端。 当我使用端口80运行服务器时,将返回bind() Permission denied 。 端口12345没问题。 如何在此服务器程序中使用端口80? #include #include #include #include #include int main(){ int sock0; struct sockaddr_in addr; struct sockaddr_in client; int len; int sock; char *message; message = “HELLO !!”; sock0 = socket(AF_INET,SOCK_STREAM,0); addr.sin_family = AF_INET; addr.sin_port = htons(80); inet_pton(AF_INET,”127.0.0.1″,&addr,sizeof(addr)); bind(sock0,(struct sockaddr *)&addr,sizeof(addr)); perror(“bind”); len = sizeof(client); sock = accept(sock0,(struct sockaddr *)&client,&len); […]

从Java-Client接收数据(数据包含int,short,string)

我正在寻找几个小时来得到关于我的问题的答案,但没有找到任何答案。 也许我在这里得到一些帮助。 我正在尝试做什么:Java-Client向C-Server发送消息。 该消息包含不同的类型,如整数,短和字符串(例如,message = int:total_msg_length; short:operation; string:hello – > total_msg-length = 4(整数的大小),operation = 2(short的大小) ,hello = 5(每个字母是1个字节= 5)。 那么,我如何在服务器中收到消息? 下面的代码接收一个Integer(工作正常)。 下一步将是接收短路然后接收一个字符串(以US-ASCII转换)。 int *msg; int recv_size; int final_msg; if( (recv_size = recv(client_socket, &msg, sizeof(msg), 0 )) < 0 ){ error_exit("Fehler bei recv(message_len)"); } final_msg = endian_swap(msg); printf("Message: %d\n", final_msg); return final_msg; 有没有办法使用字节数组而不是char缓冲区? 我感谢每一个帮助。 请原谅我的英语不好,我来自德国:-)

从单个客户端套接字连接到多个服务器C.

我有一个客户端尝试使用套接字s1连接到我的主服务器。 客户端需要继续尝试使用s1连接到主服务器,但同时连接并继续向我的辅助服务器发送“尝试”消息。 创建2个套接字,重用端口并为这2个套接字创建2个绑定是不是一个好主意,还是有更好的方法来实现这个目标? 这是客户端并使用C套接字。 谢谢。