windows虚拟机linux服务器,windows客户端和linux虚拟机服务器实现简单socket通信

ubuntu命令行输入ifconfig查看ip

d0b742b03d24e313de50d429fc5c4b63.png

服务器端代码

#include

#include

#include

#include

#include

#include

#include

int main(){

//创建套接字

int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

//将套接字和IP、端口绑定

struct sockaddr_in serv_addr;

memset(&serv_addr, 0, sizeof(serv_addr)); //每个字节都用0填充

serv_addr.sin_family = AF_INET; //使用IPv4地址

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

serv_addr.sin_port = htons(1234); //端口

bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

//进入监听状态,等待用户发起请求

listen(serv_sock, 20);

printf("waitting client...\n");

//接收客户端请求

struct sockaddr_in clnt_addr;

socklen_t clnt_addr_size = sizeof(clnt_addr);

int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);

if(-1==clnt_sock)

{

printf("error\n");

return 2;

}

printf("connectc client success..\n");

while(1)

{

//向客户端发送数据

char str[100] = {0};

printf("speak:");

//scanf("%s",str);

fgets(str,100,stdin);

str[strlen(str)-1]='\0';

write(clnt_sock, str, strlen(str));//向客户端发送数据

//sleep(1);

char getstr[100];

memset(getstr,0,100);

read(clnt_sock,getstr,100-1);

printf("client:%s\n",getstr);

}

//关闭套接字

close(clnt_sock);

close(serv_sock);

return 0;

}

windows客户端代码

//客户端

#define _CRT_SECURE_NO_WARNINGS

#define _WINSOCK_DEPRECATED_NO_WARNINGS

#include

#include

#include

//#include

#pragma comment(lib,"ws2_32.lib")

int main() {

WORD ver = MAKEWORD(2,2);//版本

WSADATA dat;

WSAStartup(ver, &dat);

if (HIBYTE(dat.wVersion) != 2 ||

LOBYTE(dat.wVersion) != 2) {

printf("请求版本失败!\n");

WSACleanup();

getchar();

return -1;

}

printf("请求2.2版本成功!\n");

//1.创建套接字

SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (INVALID_SOCKET == sock) {

printf("创建socket失败!\n");

WSACleanup();

getchar();

return -1;

}

printf("创建socket成功!\n");

sockaddr_in sin = {};

sin.sin_family = AF_INET;

sin.sin_port = htons(1234);

sin.sin_addr.S_un.S_addr = inet_addr("192.168.186.130");

//连接

if (SOCKET_ERROR == connect(sock, (sockaddr*)& sin, sizeof sin))

{

printf("连接失败!\n");

getchar();

return -1;

}

else

{

printf("连接服务器成功!\n");

}

//接受数据

char str[100] = {0};

char recvMsg[256] = {0};

int r;

r = recv(sock, recvMsg, 255, NULL);

if (r > 0){

printf("server:%s\n", recvMsg);

}

while (1) {

memset(str, 0, NULL);

printf("speak:");

//scanf("%s", str);

fflush(stdin);

gets(str);

if (strcmp("exit",str) == 0)

{

break;

}

send(sock, str, strlen(str), 0);

memset(recvMsg, 0, NULL);

r = recv(sock, recvMsg, 255, NULL);

if (r > 0) {

recvMsg[r] = '\0';

printf("server:%s\n", recvMsg);

}

}

closesocket(sock);

WSACleanup();

printf("结束\n");

getchar();

return 0;

}

编译运行没问题

48a31bcb68e432dd4a76ee5473592d52.png

标签:serv,socket,windows,虚拟机,sock,str,printf,sin,addr

来源: https://blog.csdn.net/beyond706/article/details/100067126

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值