linux虚拟机与windows间socket通信问题

虚拟机linux服务端 windows客户端 虚拟机桥接模式,能互相ping到,但运行连接不上
linux Server
#include
#include
#include
#include
#include
#include
#include
#include

#define BACKLOG 5

int main(int arge,char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
int data[2];
int sum ;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket fail");
exit(1);
}

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(12345);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bzero(&(my_addr.sin_zero),0);

if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1)
{
    perror("bind fail");
    exit(1);
}
if(listen(sockfd,BACKLOG) ==-1)
{
    perror("listen fail");
    exit(1);
}

while(1)
{
    sin_size  = sizeof(struct sockaddr_in);
    printf("hello\n");
    if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size)) == -1)
    {
        perror("accept fail");
        continue;
    }
    printf("Server:got connection from %s\n",inet_ntoa(their_addr.sin_addr));
    if(!fork())
    {
        while(1)
        {
            if((recv(new_fd,data,sizeof(data),0)) == -1)
            {
                printf("recv fail");
                break;
            }
            sum = data[0] +data[1];
            send(new_fd,(const char*)(char*)&sum,sizeof(sum),0);


        }
        close(new_fd);
        exit(0);
    }



}
close(new_fd);
close(sockfd);

return 0;

}

windows客户端
// Client.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include
#include
#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main(int argc, char* argv[])
{
try
{
//初始化套接字库
//WSAStartup
WORD wVersion = MAKEWORD(2, 2);
WSADATA wsaData;
if (0 != ::WSAStartup(wVersion, &wsaData))
{
throw "WSAStartup fail!";
}
if (2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion))
{
throw "Verify version fail!";
}

    //创建一个SOCKET
    //socket
    SOCKET sock = ::socket(AF_INET, SOCK_STREAM, 0);
    if (INVALID_SOCKET == sock)
    {
        throw "Create socket fail!";
    }

    //初始化一个有效地址(给大堂经理一个胸签)
    //SOCKADDR_IN
    SOCKADDR_IN serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(12345);
    serverAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.15");

    //连接服务器
    if (SOCKET_ERROR == ::connect(sock, (const sockaddr*)&serverAddr, sizeof(serverAddr)))
    {
        int iError = ::WSAGetLastError();
        cout << "connect fail!" << endl;
        //::Sleep(5000);
    }

    while (1)
    {

        int iSendData[2];
        cout << "Please input data:" << endl;
        cin >> iSendData[0] >> iSendData[1];
        ::send(sock, (const char*)&iSendData, sizeof(iSendData), 0);
        //::send(sock, "1111111", sizeof("1111111"), 0);
        //char szRecvBuf[100];
        //::recv(sock, (char*)szRecvBuf, sizeof(szRecvBuf), 0);
        //接收应答
        int iSum = 0;
        ::recv(sock, (char*)&iSum, sizeof(iSum), 0);
        cout << iSum <<endl;
    //  cout << szRecvBuf << endl;
    }


    ::closesocket(sock);

    ::WSACleanup();
}
catch (char* pStr)
{
    cout << pStr << endl;
    return -1;
}
return 0;

}


一运行客户端就显示连接失败,求大神解决


2个回答

客户端连接失败时的错误码是多少?是不是不能连接,防火墙等拦截请求了

oyljerry
oyljerry 回复自言自语ing: connect返回什么错误,是不是被杀毒软件等拦截了
接近 5 年之前 回复
u011718414
自言自语ing 连接也没报错,就是卡在connect了,connect报错
接近 5 年之前 回复
u011718414
自言自语ing 连接也没报错,就是卡在connect了,connect报错
接近 5 年之前 回复
u011718414
自言自语ing 客户端我用其他windows测了,好使
接近 5 年之前 回复

先看能不能ping的t通,如果ping得通看telnet到该端口是否成功

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
同一wifi下,安卓手机与linux虚拟机socket通信

我在linux虚拟机上建立了socket服务器,物理机为windows10,在安卓上建立socket客户端,是在Android Studio上写的,准备进行简单的socket通信。 当我在Android Studio上用安卓模拟器时,可以成功通信并处理。但我导出apk,安装在实体安卓手机上的时候,就连接不上,而且我windows物理机和安卓手机是在同一wifi环境下的。 windows和linux虚拟机可以ping互通,两边防火墙都关了。 实体通信需要什么具体的条件吗,为什么安卓模拟器可以成功,实体就连不上了? 急求解答!!!

linux虚拟机 ,socket 通信实验,谁能把运行的结果截图下

客户端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define rec_length 20 int main(int argc,char **argv) { struct hostent *hp; struct sockaddr_in sin; struct servent *sp; char buf[50]; int s,pid; char *service,*dest; if(argc!=1) { service=argv[1]; dest=argv[2]; } else { fprintf(stderr,"NO service assigned!\nUsage:"); fprintf(stderr,"%s service_name destination!\n",argv[0]); fprintf(stderr,"Note: service_name is defined in /etc/services\n"); fprintf(stderr," destination is defined in /etc/hosts\n"); exit(-1); } if((sp=getservbyname(service,"tcp"))==NULL) { fprintf(stderr,"Error: getservbyname"); exit(-5); } if((hp=gethostbyname(dest))==0) { fprintf(stderr,"Error: gethostbyname"); exit(-6); } bzero(&sin,sizeof(sin)); bcopy(hp->h_addr,&sin.sin_addr,hp->h_length); sin.sin_family=hp->h_addrtype; sin.sin_port=sp->s_port; if((s=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Error: socket"); exit(-6); } if(connect(s,&sin,sizeof(sin))==-1) { fprintf(stderr,"Error: connect"); close(s); exit(-6); } // next 2 Line build request message pid=getpid(); sprintf(buf,"%5.5d%5.5d%5.5d%5.5d\n",pid,pid*2,pid*3,pid*4); fprintf(stderr,"%s is sending request message: %s\n",argv[0],buf); if(write(s,buf,rec_length)!=rec_length){ //to server fprintf(stderr,"Write Socket s ERROR\n!"); close(s); exit(-1); } if(read(s,buf,rec_length)==0){ //get replay from server fprintf(stderr,"Read Socket s Error\n"); close(s); exit(-2); } printf("%s get reply: %s\n",argv[0],buf); close(s); exit(0); } 服务端 ```#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define rec_length 20 main(int argc, char **argv ) { struct sockaddr_in sin; struct servent *sp; int s,ns,pid; char buf[50]; char *service; if(argc!=1) service=argv[1]; else { fprintf(stderr,"NO service assigned!\nUsage:\n"); fprintf(stderr,"\t%s server_name!\n",argv[0]); fprintf(stderr,"Note: server_name is defined in file/etc/services\n"); exit(-1); } if((sp=getservbyname(service,"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname"); exit(-5);} if((s=socket(AF_INET,SOCK_STREAM,0))==-1){ fprintf(stderr,"Error: socket create"); exit(-6); } bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port; if(bind(s,&sin,sizeof(sin))==-1){ fprintf(stderr,"Error: bind"); close(s); exit(-6); } if(listen(s,5)==-1){ fprintf(stderr,"Error: listen"); close(s); exit(-6); } while(1){ fprintf(stderr,"\n\t\t\t Now wait connect ...\n"); if((ns=accept(s,0,0))==-1){ // wait a connection */ fprintf(stderr,"error: accept"); continue; } if((pid=fork())==-1){ // conneted, and then create child proc fprintf(stderr,"server: fork error!"); close(s); exit(-1); } if(pid!=0){ //parent proce, nothing to do, and to the next loop close(ns);wait(0);continue; } if(pid==0){ // entered child proccedure close(s); printf("Receive a client connect:%s\n",argv[1]); if(read(ns,buf,rec_length)==0){ fprintf(stderr,"Read nothing from socket:ns\n"); close(ns); exit(-3); } printf("%s get message from ns: %s\n",argv[0],buf); sprintf(buf,"%5.5d%5.5d%5.5d%5.5d\n",pid,pid*2,pid*3,pid*4); fprintf(stderr,"And, %s replay to client: %s\n",argv[0],buf); if(write(ns,buf,rec_length)!=rec_length){ fprintf(stderr,"Write socket ns error!\n"); close(ns); exit(-4); } close(ns); exit(0); } } } 中间件: ```#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define rec_length 20 main(int argc, char **argv ) { // structure defined for request as a client struct hostent *hp1; struct sockaddr_in sin1; struct servent *sp1; char sbuf[50]; int ss,spid; char *sservice,*sdest; // structure defined for request as a server struct sockaddr_in sin; struct servent *sp; int s,ns,pid; char buf[50]; char *service; // test the environment parameter: lservice, dservice, server_name if(argc==4){ service=argv[1];sservice=argv[2]; sdest=argv[3];} else { fprintf(stderr,"Parameter assigned Error!\nUsage:\n"); fprintf(stderr,"\t%s lservice dservice server_name!\n",argv[0]); fprintf(stderr,"Note: server_name is defined in file/etc/hosts\n"); fprintf(stderr,"and: lservice dservice are defined in file /etc/services\n"); exit(-1); } if((sp=getservbyname(service,"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname"); exit(-5); } if((s=socket(AF_INET,SOCK_STREAM,0))==-1){ fprintf(stderr,"Error: socket create"); exit(-6); } bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port; if(bind(s,&sin,sizeof(sin))==-1){ fprintf(stderr,"Error: bind"); close(s); exit(-6); } if(listen(s,5)==-1){ fprintf(stderr,"Error: listen"); close(s); exit(-6); } while(1){ fprintf(stderr,"\n\t\t\t Now wait connect ...\n"); if((ns=accept(s,0,0))==-1){ // wait a connection */ fprintf(stderr,"error: accept"); continue; } if((pid=fork())==-1){ // conneted, and then create child proc fprintf(stderr,"server: fork error!"); close(s); exit(-1); } if(pid!=0){ //parent proce, nothing to do, and to the next loop close(ns);wait(0);continue; } if(pid==0){ // entered child proccedure close(s); printf("Receive a client connect:%s\n",argv[1]); if(read(ns,buf,rec_length)==0){ fprintf(stderr,"Read nothing from socket:ns\n"); close(ns); exit(-3); } printf("%s get message from ns: %s\n",argv[0],buf); // request message got from the Client. // Begine a Connection to Server as a Client if((sp1=getservbyname(sservice,"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname s1"); exit(-5); } if((hp1=gethostbyname(sdest))==0){ fprintf(stderr,"Error: gethostbyname s1"); exit(-6); } bzero(&sin1,sizeof(sin1)); bcopy(hp1->h_addr,&sin1.sin_addr,hp1->h_length); sin1.sin_family=hp1->h_addrtype; sin1.sin_port=sp1->s_port; if((ss=socket(AF_INET,SOCK_STREAM,0))==-1){ fprintf(stderr,"Error: socket s1"); exit(-6); } if(connect(ss,&sin1,sizeof(sin1))==-1){ fprintf(stderr,"Error: connect s1"); close(ss); exit(-6); } // next 2 Line build request message spid=getpid(); sprintf(sbuf,"%5.5d%5.5d%5.5d%5.5d",spid,spid*2,spid*3,spid*4); fprintf(stderr,"%s is sending request message: %s s1\n",argv[0],sbuf); if(write(ss,sbuf,rec_length)!=rec_length){ //to server fprintf(stderr,"Write Socket ss ERROR! s1\n"); close(ss); exit(-1); } if(read(ss,sbuf,rec_length)==0){ //from server fprintf(stderr,"Read Socket ss Error! s1\n"); close(ss); exit(-2); } printf("%s get reply: %s\n",argv[0],sbuf); close(ss); // End the Communication with my Server // Next 2 Line, build a replay Message buf, and write it back pid=getpid(); sprintf(buf,"%5.5d%5.5d%5.5d%5.5d",pid,pid*2,pid*3,pid*4); fprintf(stderr," and, send it back to client: %s\n",buf); if(write(ns,buf,rec_length)!=rec_length){ fprintf(stderr,"Write socket ns error!\n"); close(ns); exit(-4); } close(ns); exit(0); } } }

socket通信在一个虚拟机开两个终端可以通信,换成两个虚拟机出错

在一个虚拟机里开两个终端可以实现通信,但是换成两个虚拟机就在connect函数那里失败了,返回-1,输出的错误提示是:connect:connection timed out。我在网上搜了很久都解决不了。我的设备是virtualbox里的两台ubuntu虚拟机,ip地址分别为10.0.2.15和10.0.3.15,能上网,能ping通,防火墙已关闭,端口没被占用,请问这可能是什么原因呢? 服务器端 ``` #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/shm.h> #define MYPORT 8887 #define QUEUE 20 #define BUFFER_SIZE 1024 int main() { ///定义sockfd int server_sockfd = socket(AF_INET,SOCK_STREAM, 0); ///定义sockaddr_in struct sockaddr_in server_sockaddr; server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(MYPORT); server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); ///bind,成功返回0,出错返回-1 if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1) { perror("bind"); exit(1); } ///listen,成功返回0,出错返回-1 if(listen(server_sockfd,QUEUE) == -1) { perror("listen"); exit(1); } ///客户端套接字 char buffer[BUFFER_SIZE]; struct sockaddr_in client_addr; socklen_t length = sizeof(client_addr); ///成功返回非负描述字,出错返回-1 int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length); if(conn<0) { perror("connect"); exit(1); } while(1) { memset(buffer,0,sizeof(buffer)); int len = recv(conn, buffer, sizeof(buffer),0); if(strcmp(buffer,"exit\n")==0) break; fputs(buffer, stdout); send(conn, buffer, len, 0); } close(conn); close(server_sockfd); return 0; } ``` 客户端 ``` #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/shm.h> #define MYPORT 8887 #define BUFFER_SIZE 1024 int main() { ///定义sockfd int sock_cli = socket(AF_INET,SOCK_STREAM, 0); ///定义sockaddr_in struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(MYPORT); ///服务器端口 servaddr.sin_addr.s_addr = inet_addr("10.0.3.15"); ///服务器ip ///连接服务器,成功返回0,错误返回-1 if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { perror("connect"); exit(1); } char sendbuf[BUFFER_SIZE]; char recvbuf[BUFFER_SIZE]; while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL) { send(sock_cli, sendbuf, strlen(sendbuf),0); ///发送 if(strcmp(sendbuf,"exit\n")==0) break; recv(sock_cli, recvbuf, sizeof(recvbuf),0); ///接收 fputs(recvbuf, stdout); memset(sendbuf, 0, sizeof(sendbuf)); memset(recvbuf, 0, sizeof(recvbuf)); } close(sock_cli); return 0; } ``` 代码来自博客园--旭东的博客,谢谢博主。[原博客链接](http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html#commentform "")

windows客户端和linux服务端socket通信失败,connect返回-1,求助

windows客户端和linux服务端socket通信失败,connect返回-1,查了下error是10060,但是双方能ping通,利用tcpdump抓包得到 10:57:36.096818 IP 192.168.1.104.3904 > 192.168.1.100.8887: Flags [S], seq 1236760459, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 10:57:39.097671 IP 192.168.1.104.3904 > 192.168.1.100.8887: Flags [S], seq 1236760459, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 10:57:45.098355 IP 192.168.1.104.3904 > 192.168.1.100.8887: Flags [S], seq 1236760459, win 65535, options [mss 1460,nop,nop,sackOK], length 0 求大神帮忙看下为啥connect失败

linux socket 通信问题 ?

我在2两台虚拟机上分别运行linux 服务端和客服端socket程序,客户端和服务端能正常通信,但是我用wireshark 抓包时确没抓到有这两个虚拟机的通信包,请问高手们这个是啥情况??

虚拟机中的 linux 配置成服务器,运行socket服务器端,然后互联网上的其它socket客户端可以连接我。

就是实现标题的功能。 现在socket 只能在局域网中 通信,我想搞成在互联网中也可以通信。 不能设置路由,没钱买云服务器 会的人肯定很简单就实现了,不会的人只会讲一些有的没的,不要嘴炮 只要实干的人来回答问题,帮我解决了 给你钱也行。 回答就回答 详细步骤,按照你的步骤就可以实现这个功能, 别跟我说 学什么学什么去,百度什么p2p去搞什么路由器映射去, 这些话我也会说啊,问题是 拿出具体的解决步骤,别给我讲原理讲思路, 先拿出个 能实现的 东西来

linux socket 端口问题

主机IP: 192.168.1.14 公网:1.2.3.4 路由器映射到外网端口:8888 socket 服务器bind 端口:1234 ,地址只能用 1.2.3.4:8888 外网的客户端 绑定地址 和 端口 分别应该是什么,

linux socket accept和connect都直接返回,根本没连上

1.先打开服务端,服务端accept直接返回-1,紧接着read返回bad fd错误 2.打开客户端,connect也是直接返回0, 非法IP也能返回0... 用sudo ufw status查看防火墙确定关闭了。请问是什么原因?

vxworks 下workbench3.3 上实现udp 通信 只能发送,不能接收的问题?

我是在VMware 上装的xp ,之后在xp 上安装的workbench3.3 。 需要用C++ 编写一个类,实现udp socket 通信,自己编写的程序是实现服务器功能,和TCP&UDP测试工具进行通信,自己的程序只能给测试工具发送消息,接收进程一直显示pend .自己编写的程序和TCP&UDP测试工具都是在此虚拟机安装的XP上运行的。 代码类大概如下: class Socket{ public: Socket(); recvmes(){int nev = recvfrom();} ........ }; 有没有知道这方面的大神给个建议。指导一下。

socket编程客户端连接失败

想用socket通信,没法解决客户端连接失败,代码是一本书上的实例,书上的都运行不成功吗,大家帮看下问题在那里,谢谢了![图片说明](https://img-ask.csdn.net/upload/201507/13/1436783188_607205.png) 代码如下: 服务器端:################################################### #include<stdio.h> #include<winsock.h> /*引入winsock头文件*/ int main() { /*-----------------------------------------*/ /*------------定义变量---------------------*/ /*-----------------------------------------*/ char Sendbuf[100]; /*发送数据的缓冲区*/ char Receivebuf[100]; /*接受数据的缓冲区*/ int SendLen; /*发送数据的长度*/ int ReceiveLen; /*接收数据的长度*/ int Length; /*表示SOCKADDR的大小*/ SOCKET socket_server; /*定义服务器套接字*/ SOCKET socket_receive; /*定义用于连接套接字*/ SOCKADDR_IN Server_add; /*服务器地址信息结构*/ SOCKADDR_IN Client_add; /*客户端地址信息结构*/ WORD wVersionRequested; /*字(word):unsigned short*/ WSADATA wsaData; /*库版本信息结构*/ int error; /*表示错误*/ /*-----------------------------------------*/ /*------------初始化套接字库---------------*/ /*-----------------------------------------*/ /*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/ wVersionRequested = MAKEWORD( 2, 2 ); /*加载套接字库,初始化Ws2_32.dll动态链接库*/ error = WSAStartup( wVersionRequested, &wsaData); if(error!=0) { printf("加载套接字失败!"); return 0; /*程序结束*/ } /*判断请求加载的版本号是否符合要求*/ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); /*不符合,关闭套接字库*/ return 0; /*程序结束*/ } /*-----------------------------------------*/ /*------------设置连接地址-----------------*/ /*-----------------------------------------*/ Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/ Server_add.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/*主机地址*/ Server_add.sin_port=htons(5000);/*端口号*/ /*------------创建套接字-------------------*/ /*AF_INET表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关的协议。*/ socket_server=socket(AF_INET,SOCK_STREAM,0); /*-----------------------------------------*/ /*---绑定套接字到本地的某个地址和端口上----*/ /*-----------------------------------------*/ /*socket_server为套接字,(SOCKADDR*)&Server_add为服务器地址*/ if(bind(socket_server,(SOCKADDR*)&Server_add,sizeof(SOCKADDR) )==SOCKET_ERROR) { printf("绑定失败\n"); } /*-----------------------------------------*/ /*------------设置套接字为监听状态---------*/ /*-----------------------------------------*/ /*监听状态,为连接做准备,最大等待的数目为5*/ if(listen(socket_server,5)<0) { printf("监听失败\n"); } /*-----------------------------------------*/ /*------------接受连接---------------------*/ /*-----------------------------------------*/ Length=sizeof(SOCKADDR); /*接受客户端的发送请求,等待客户端发送connect请求*/ socket_receive=accept(socket_server,(SOCKADDR*)&Client_add,&Length); if(socket_receive==SOCKET_ERROR) { printf("接受连接失败"); } /*-----------------------------------------*/ /*--------------进行聊天-------------------*/ /*-----------------------------------------*/ while(1) /*无限循环*/ { /*--------接收数据---------*/ ReceiveLen =recv(socket_receive,Receivebuf,100,0); if(ReceiveLen<0) { printf("接收失败\n"); printf("程序退出\n"); break; } else { printf("client say: %s\n",Receivebuf); } /*--------发送数据---------*/ printf("please enter message:"); scanf("%s",Sendbuf); SendLen=send(socket_receive,Sendbuf,100,0); if(SendLen<0) { printf("发送失败\n"); } } /*-----------------------------------------*/ /*---------释放套接字,关闭动态库----------*/ /*-----------------------------------------*/ closesocket(socket_receive); /*释放客户端的套接字资源*/ closesocket(socket_server);/*释放套接字资源*/ WSACleanup();/*关闭动态链接库*/ return 0; } 客户端:##################################################### #include<stdio.h> #include<winsock.h> /*引入winsock头文件*/ int main() { /*-----------------------------------------*/ /*------------定义变量---------------------*/ /*-----------------------------------------*/ char Sendbuf[100]; /*发送数据的缓冲区*/ char Receivebuf[100]; /*接受数据的缓冲区*/ int SendLen; /*发送数据的长度*/ int ReceiveLen; /*接收数据的长度*/ SOCKET socket_send; /*定义套接字*/ SOCKADDR_IN Server_add; /*服务器地址信息结构*/ WORD wVersionRequested; /*字(word):unsigned short*/ WSADATA wsaData; /*库版本信息结构*/ int error; /*表示错误*/ /*-----------------------------------------*/ /*------------初始化套接字库---------------*/ /*-----------------------------------------*/ /*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/ wVersionRequested = MAKEWORD( 2, 2 ); /*加载套接字库,初始化Ws2_32.dll动态链接库*/ error = WSAStartup( wVersionRequested, &wsaData); if(error!=0) { printf("加载套接字失败!"); return 0; /*程序结束*/ } /*判断请求加载的版本号是否符合要求*/ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); /*不符合,关闭套接字库*/ return 0; /*程序结束*/ } /*-----------------------------------------*/ /*------------设置服务器地址---------------*/ /*-----------------------------------------*/ Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/ /*服务器的地址,将一个点分十进制表示为IP地址,inet_ntoa是将地址转成字符串*/ Server_add.sin_addr.S_un.S_addr = inet_addr("192.168.1.238"); Server_add.sin_port=htons(5000);/*端口号*/ /*-----------------------------------------*/ /*-------------进行连接服务器--------------*/ /*-----------------------------------------*/ /*客户端创建套接字,但是不需要绑定的,只需要和服务器建立起连接就可以了,*/ /*socket_sendr表示的是套接字,Server_add服务器的地址结构*/ socket_send=socket(AF_INET,SOCK_STREAM,0); /*-----------------------------------------*/ /*-------------创建用于连接的套接字--------*/ /*-----------------------------------------*/ /*AF_INET表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关的协议。*/ if(connect(socket_send,(SOCKADDR*)&Server_add,sizeof(SOCKADDR)) == SOCKET_ERROR) { printf("连接失败!\n"); } /*-----------------------------------------*/ /*--------------进行聊天-------------------*/ /*-----------------------------------------*/ while(1) /*无限循环*/ { /*---------------发送数据过程----------*/ printf("please enter message:"); scanf("%s",Sendbuf); SendLen = send(socket_send,Sendbuf,100,0); /*发送数据*/ if(SendLen < 0) { printf("发送失败!\n"); } /*--------------接收数据过程---------------*/ ReceiveLen =recv(socket_send,Receivebuf,100,0); /*接受数据*/ if(ReceiveLen<0) { printf("接收失败\n"); printf("程序退出\n"); break; } else { printf("Server say: %s\n",Receivebuf); } } /*-----------------------------------------*/ /*---------释放套接字,关闭动态库----------*/ /*-----------------------------------------*/ closesocket(socket_send);/*释放套接字资源*/ WSACleanup();/*关闭动态链接库*/ return 0; }

linux udp通信不成功,server收不到消息

仅仅是一个 示例,可是先执行server 后执行 client ,server还是没有收到消息。问题出在哪里呢 Server.c #include "server.h" #define PORT 2345 #define IP "192.168.0.114" int main (void) { int fd; struct sockaddr_in servaddr, cliaddr; char buf[BUFFER_SIZE]; socklen_t peerlen; //建立socket连接 fd = socket(AF_INET, SOCK_DGRAM, 0); if(fd == -1) { printf("fd error!\n"); return -1; } //设置sockaddr_in参数 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); servaddr.sin_addr.s_addr = inet_addr(IP); //绑定 bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr)); if(bind < 0) { printf("bind error~!\n"); return -1; } //调用recvfroom,等待接收客户端数据 peerlen = sizeof(cliaddr); while(1) { printf("Begin recv!\n"); recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,&peerlen); printf("recv form client %s \n", buf); strcpy(buf, "Welcome to server"); sendto(fd, &buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,peerlen); } close(fd); return 0; } client.c: #include "client.h" #define PORT 2345 #define IP "192.168.0.114" int main (void) { int fd; struct sockaddr_in servaddr; char buf[BUFFER_SIZE] = "Hello Server!"; //建立socket连接 fd = socket(AF_INET, SOCK_DGRAM, 0); if(fd == -1) { printf("fd error \n"); exit(-1); } //设置sockaddr_in参数 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); servaddr.sin_addr.s_addr = inet_addr(IP); //向服务器发送消息 sendto(fd, buf, sizeof(buf), 0 ,(struct sockaddr *)&servaddr,sizeof(servaddr)); printf("Send message to Sever!\n"); //接收服务器消息 printf("Begin recv!\n"); recvfrom(fd, buf, sizeof(buf), 0 ,NULL ,NULL); if(recvfrom < 0) { printf("recv error!\n"); return 1; } printf("recv from Server %s \n", buf); close(fd); return 0; }

socket编程中的accept函数

一个简单的客户/服务器的实现中,connect成功了,但是accept失败,它的返回值为0,这是怎么回事?

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

C++11:一些微小的变化(新的数据类型、template表达式内的空格、nullptr、std::nullptr_t)

本文介绍一些C++的两个新特性,它们虽然微小,但对你的编程十分重要 一、Template表达式内的空格 C++11标准之前建议在“在两个template表达式的闭符之间放一个空格”的要求已经过时了 例如: vector&lt;list&lt;int&gt; &gt;; //C++11之前 vector&lt;list&lt;int&gt;&gt;; //C++11 二、nullptr ...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

【阿里P6面经】二本,curd两年,疯狂复习,拿下阿里offer

二本的读者,在老东家不断学习,最后逆袭

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!...

作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)格子衬衫、常掉发、双肩包、修电脑、加班多……这些似乎成了大众给程序员的固定标签。近几年流行的“跨界风”开始刷新人们对程序员的...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

2020春招面试了10多家大厂,我把问烂了的数据库事务知识点总结了一下

2020年截止目前,我面试了阿里巴巴、腾讯、美团、拼多多、京东、快手等互联网大厂。我发现数据库事务在面试中出现的次数非常多。

程序员如何与产品经理优雅的干架

早前,平安产险科技一名外包程序员和一名外包产品经理干架的视频几乎在互联网圈都传遍了,因为产品提了一个需求:要求用户App的主题颜色能根据手机壳自动调整。 首先说这个需求对于应用开发工程师来说,确实是有点奇葩,当然并非不能实现。这块涉及图形图像处理,用机器学习和人工智能来提取图像颜色,这是基本图像识别过程,对于采集图像,可以提示对着镜子自拍一张,上传图片,通过大量的训练数据,来识别手机体颜色。当然并...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

立即提问
相关内容推荐