JmR*_*Rag 2 c sockets tcp loopback
我正在尝试在C中设置回送套接字,但没有任何效果。我正在尝试制作一个函数,该函数使用环回地址打开套接字,将数据发送到套接字,然后从另一个函数读取数据,但是没有任何效果。我相信我不知道如何使用与连接有关的功能。到目前为止,这是我完成的工作:
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
#include <signal.h>
#include <iostream>
#include <cerrno>
#include <pthread.h>
int internal_s;
void function1(){
if ((internal_s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
perror_exit("socket");
/* Find server address */
struct sockaddr_in loopback;
struct sockaddr *serverptr = (struct sockaddr*)&loopback;
/*Convert port number to integer*/
loopback.sin_family = AF_INET; /* Internet domain */
loopback.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
loopback.sin_port=htons(10000);
/* Initiate connection */
if (bind(internal_s,serverptr, sizeof(loopback))<0)
perro("bind");
int test=1;
err=write(internal_s,&test,sizeof(int));
if(err<0)
perror(write);
}
void Open_Internal_sock(int socket_s){
struct sockaddr_in loopback;
struct sockaddr *serverptr = (struct sockaddr*)&loopback;
/*Convert port number to integer*/
loopback.sin_family = AF_INET; /* Internet domain */
loopback.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
loopback.sin_port=htons(10000);
/* Initiate connection */
if (bind(socket_s,serverptr, sizeof(loopback))<0)
perror("bind");//Invalid argument
int test;
if(read(socket_s,&test,sizeof(int))<0)
perror("read");//herer it prints:Transport endpoint is not connected
}
int main(){
function1(i);
Open_Internal_sock(internal_s);
}
Run Code Online (Sandbox Code Playgroud)
简而言之,客户端(发送者,“写者”)需要调用connect(),而服务器(侦听器,接收者,“阅读者”)需要调用listen()和accept()。
服务器和客户端还需要单独的执行线程,因为某些套接字操作会阻塞并且会导致单个执行线程永远停止。最简单的方法可能是将server.c和client.c做成独立的程序。
另外,尝试在启用警告的情况下编译代码,例如gcc -Wall。现在有很多错误,编译器可以为您指出。有关更清晰的消息,请尝试使用clang而不是gcc作为编译器。
我建议查看http://kohala.com/start/unpv12e/unpv12e.tar.gz。解压缩tar xzvf unpv12e.tar.gz并查看unpv12e / tcpcliserv / tcpcli01.c和unpv12e / tcpcliserv / tcpserv01.c。如果您想复制和粘贴,请注意,例如,大写字母Listen()需要更改为小写才能使代码在没有unpv标题的情况下工作。此更改还删除了所有错误检查,因此请自行处理错误。
| 归档时间: |
|
| 查看次数: |
9377 次 |
| 最近记录: |