博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows与虚拟机下的socket通信
阅读量:4137 次
发布时间:2019-05-25

本文共 3477 字,大约阅读时间需要 11 分钟。

 

send.c放在主机上

recv.c放在虚拟机上

虚拟机的设置,选择birdge连接方式

 

编译环境是vc6.0

测试软件是wireshark

源代码

send.c //发送

#include <stdio.h>

#include <winsock2.h>
#pragma comment(lib, "wsock32.lib")
typedef int   int32;
typedef short int16;
typedef char  int8;
typedef unsigned int   uint32;
typedef unsigned short uint16;
typedef unsigned char  uint8;
typedef  unsigned char boolean;
SOCKET listen_socket;     /* socket of waiting receiving data */
/* binded address */
static struct sockaddr_in srv;
/* destination address of sending(send CLIENTS_NUM ports at one time) */
static struct sockaddr_in dest;
/* port to listen on */
uint16 listening_port;
//#define ERR_PRINT(fmt,...)
int main(void)
{
  char snd_buf[100];
  int num;
  WSADATA  Ws;
  //Init Windows Socket
  //必须有这个WSAStartup函数,不然socket不成功
  if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
  {
    printf("Init Windows Socket Failed::%d",GetLastError());
    return -1;
  }
  listen_socket = socket(PF_INET, SOCK_DGRAM, 0);
  if ( listen_socket == INVALID_SOCKET )
  {
    printf("Error: create socket failed %d/n",listen_socket);
    return FALSE;
  }
   
  srv.sin_family = AF_INET;
  //srv.sin_addr.s_addr = htonl( INADDR_ANY );  /* ANY Address 本机*/
  srv.sin_addr.s_addr=inet_addr("192.168.1.121");//虚拟机的IP
  srv.sin_port = htons(6000);
//这里不需要绑定,不然绑定不成功,返回错误码10049
/*  if (bind( listen_socket, (struct sockaddr *)&srv, sizeof(srv)) != 0)
  {
    printf("Error: bind failed. Error code: %d/n", GetLastError());
    closesocket( listen_socket );
    return FALSE;
  }
*/
  memset(snd_buf,0,100);
  sprintf(snd_buf,"aaaaaaaaaaaaaaamessage from client/n");
    printf("send buf %s/n",snd_buf);
  num = sendto(listen_socket,snd_buf,sizeof(snd_buf),0,(struct sockaddr*)&srv,sizeof(struct sockaddr));
  if (num == SOCKET_ERROR) {
        printf("Send Info Error %d",GetLastError());
  }
  printf("send %d characters/n",num);
  closesocket(listen_socket);
  return 0;
}

 

 

 

 

recv.c  //接收

 

#include <stdio.h>

#include <winsock2.h>
#pragma comment(lib, "wsock32.lib")
typedef int   int32;
typedef short int16;
typedef char  int8;
typedef unsigned int   uint32;
typedef unsigned short uint16;
typedef unsigned char  uint8;
typedef  unsigned char boolean;
SOCKET listen_socket1;     /* socket of waiting receiving data */
SOCKET listen_socket;     /* socket of waiting receiving data */
/* binded address */
static struct sockaddr_in srv;
/* destination address of sending(send CLIENTS_NUM ports at one time) */
static struct sockaddr_in clt;
/* port to listen on */
uint16 listening_port;
int32 len;
//#define ERR_PRINT(fmt,...)
int main(void)
{
  char recv[100];
  int num;
  WSADATA  Ws;
  //Init Windows Socket
  if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
  {
    printf("Init Windows Socket Failed::",GetLastError());
    return -1;
  }
  listen_socket1 = socket(PF_INET, SOCK_DGRAM, 0);
  if ( listen_socket1 == INVALID_SOCKET )
  {
    printf("Error: create socket failed/n");
    return FALSE;
  }
   
  srv.sin_family = PF_INET;
  srv.sin_addr.s_addr = htonl( INADDR_ANY );  /* ANY Address */
  srv.sin_port = htons(6000);
  if (bind( listen_socket1, (struct sockaddr *)&srv, sizeof(srv)) != 0)
  {
    printf("Error: bind failed. Error code: %d/n", GetLastError());
    closesocket( listen_socket1 );
    return FALSE;
  }
  len = sizeof(struct sockaddr_in);
  memset(recv,0,100);
  //sprintf(recv,"aaaaaaaaaaaaaaamessage from client/n");
  num = recvfrom(listen_socket1, recv, sizeof(recv), 0, (struct sockaddr*)&recv, &len);
  printf("receive %d characters/n",num);
  closesocket(listen_socket1);
  return 0;
}

 

 

先执行虚拟机里面的recv.c

弹出对话框,阻塞等待数据的到来

然后执行主机下的send.c程序

显示数据发送完毕

 

 

再看虚拟机里的执行窗口

 

 

wireshark显示

 

 

 

wireshark设置过滤条件

虚拟机

ip.addr==192.168.1.121

主机

ip.addr==192.168.1.121

转载地址:http://xmlvi.baihongyu.com/

你可能感兴趣的文章
51nod 分类
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>