第一步定下自己要用的头文件。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>
第二步创建主函数和定义socket套接字
int main(int argc, char *argv[])
{
int sock=socket(AF_INET, SOCK_STREAM, 0);
然后写一个循环。
if(-1 == sock)
{ perror("socket");}
printf("socket is successed\n");
然后引用结构体
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(/*端口号*/);
addr.sin_addr.s_addr = inet_addr("/*ip地址*/");
然后依次为bind,listen,accept创建循环
if(-1== bind(sock,(struct sockaddr *)&addr,sizeof(addr)))
{perror("bind");}
printf("bind is successed\n");
if (-1==listen(sock,5))
{perror("listen");}
printf("listen is successed\n");
int apt = accept(sock,NULL,NULL);
if(-1==apt)
{perror("accept");}
printf("accept is successed\n");
用TCP测试工具测试一下是否连接成功
一直显示正在连接,但是虚拟机中的accept没有反应。然后找到错误(用了一天的时间才找到)
找到了问题所在,提供管理员权限勾选,一直显示更新配置,过了一段时间后弹窗关闭,还是没有勾选上。这时我用了一位大佬的办法http://t.csdn.cn/HNXZ2 按照这个链接的方法操作后,成功连接!
创建一个死循环,让连接能一直保持。
while(1)
{
char buf[128]={0};
int red=read(apt,buf,sizeof(buf));
if( 0 == red)
{ break;}
write(apt,buf,red);
}