windows与linux之间实现socket通信

zxx178239 2015-11-23 09:35:27
写了个测试例子,只发送hello,但是就是发送不成功,求解答

linuxServer代码如下
/*************************************************************************
> File Name: server.c
> Author: zxx
> Mail: zxx178239@163.com
> Created Time: Mon 23 Nov 2015 07:22:04 PM CST
************************************************************************/

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>


int main(int argc, char *argv[])
{
int fd_listen, fd_client;
char port[64] = "";
char ip[64] = "";

fd_listen = socket(AF_INET, SOCK_STREAM, 0);

if(fd_listen == -1)
{
perror("socket");
exit(1);
}

if(argc < 3)
{
printf("argc error!");
exit(1);
}
struct sockaddr_in seraddr, clientaddr;

memset(&seraddr, 0, sizeof(seraddr));
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(atoi(argv[2]));
seraddr.sin_addr.s_addr = inet_addr(argv[1]);

if(bind(fd_listen, (struct sockaddr *)&seraddr, 16) == -1)
{
perror("bind");
exit(1);
}

if(listen(fd_listen, 10) == -1)
{
perror("listen");
exit(1);
}

memset(&clientaddr, 0, sizeof(clientaddr));
socklen_t len = sizeof(clientaddr);
printf("wait accept\n");
fd_client = accept(fd_listen, (struct sockaddr *)&clientaddr, &len);

printf("accept success!\n");
if(fd_client == -1)
{
perror("accept");
exit(1);
}

printf("%s : %d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
char buf[100] = "";
recv(fd_client, buf, 100, 0);
printf("recv from client: %s\n", buf);
send(fd_client, "hello", 6, 0);
close(fd_client);
close(fd_listen);
}


winClient代码如下
#include <stdio.h>
#include <stdlib.h>

#include <winsock2.h>

#pragma comment(lib, "ws2_32")

int main(int argc, char *argv[])
{
WSADATA wsadata;
struct sockaddr_in sin;
SOCKET clientsock;
char buf[50] = "";

if (argc < 3)
{
printf("argc error!\n");
exit(1);
}

if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
{
printf("start error!\n");
exit(1);
}


clientsock = socket(AF_INET, SOCK_STREAM, 0);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(atoi(argv[2]));
sin.sin_addr.s_addr = inet_addr(argv[1]);


printf("socket ok!\n");
connect(clientsock, (struct sockaddr *)&sin, sizeof(sin));
printf("connect ok!\n");
send(clientsock, "hello world", 12, 0);

recv(clientsock, buf, 50, 0);
closesocket(clientsock);
WSACleanup();
}


求大神帮忙看看,谢谢
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-11-24
  • 打赏
  • 举报
回复
弱弱地问一句,能ping通吗?
ztenv 版主 2015-11-24
  • 打赏
  • 举报
回复
1、在linux下程序运行后,看有没有监听端口, 2、在windows下抓包,看有没有发送TCP包到linux服务器的监听端口 3、在client、server程序中,每调用socket相关函数,均判断一下函数的返回值, 程序如此简单,相信能找到问题的,估计只是一个小错误而已。
paschen 版主 2015-11-24
  • 打赏
  • 举报
回复
zxx178239 2015-11-24
  • 打赏
  • 举报
回复
已经找到错误,是防火墙问题,已解决
707wk 2015-11-23
  • 打赏
  • 举报
回复
搭建脚手架调试看哪出问题了

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧