windows下的C语言socket编程没有相关socket的头文件怎么办?

windows下的C语言socket编程没有相关socket的头文件怎么办?,第1张

//服务端代码世握

#include<winsock2.h>

#include<stdio.h>

#pragma comment(lib,"ws2_32.lib")//这句关键

void main(){

WORD wV

WSADATA ws

int er

wV=MAKEWORD(1,1)

er=WSAStartup(wV,&ws)

if(er!=0){

return

}

if(LOBYTE(ws.wVersion)!=1||HIBYTE(ws.wVersion)!=1){

WSACleanup()

return

}

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0)

SOCKADDR_IN addrSrv

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY)

addrSrv.sin_family=AF_INET

addrSrv.sin_port=htons(6000)

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))

listen(sockSrv,5)

SOCKADDR_IN addrClient

int len=sizeof(SOCKADDR)

while(1)

{

SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len)

char sendBuf[100]

sprintf(sendBuf,"welcome %s to wozhe",inet_ntoa(addrClient.sin_addr))

send(sockConn,sendBuf,strlen(sendBuf)+1,0)

char recvBuf[100]

recv(sockConn,recvBuf,100,0)

printf("%s\n",recvBuf)

closesocket(sockConn)

}

}

//客户端

#include<winsock2.h>

#include<stdio.h>

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

void main(){

WORD wV

WSADATA ws

int er

wV=MAKEWORD(1,1)

er=WSAStartup(wV,&ws)

if(er!=0){

return

}

if(LOBYTE(ws.wVersion)!=1||HIBYTE(ws.wVersion)!=1){

WSACleanup()

return

}

SOCKET sockC=socket(AF_INET,SOCK_STREAM,0)

SOCKADDR_IN addrS

addrS.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"搜隐庆)

addrS.sin_family=AF_INET

addrS.sin_port=htons(6000)

connect(sockC,(SOCKADDR*)&addrS,sizeof(SOCKADDR))

char recvB[100]

recv(sockC,recvB,100,0)

printf("%s\n",recvB)

send(sockC,"this is list",strlen("携慧this is list")+1,0)

closesocket(sockC)

WSACleanup()

}

#include <windows.h>

#include <iostream> //4, 补上COUT输出需要的头文件

using namespace std //5, 使用了STL库,引用STD命名空间

int main() {

//

//8....可能需要加上WSAStartup

int a

int len_ad

a=socket(PF_INET,SOCK_STREAM,0)

//6...建议在这儿加上判断a是否有效条件检查

struct sockaddr_in ad

memset(&ad,0,sizeof ad)

ad.sin_family=AF_INET

ad.sin_port=htons(1024)

ad.sin_addr.s_addr=inet_addr("172.18.20.234")

len_ad=sizeof ad

connect(a,(const sockaddr*)&ad,sizeof ad)/拍衫/1,这儿加一个类颤贺前型转换

char buf[100]//2, char* buf[100]错了改成char buf[100]

memset(buf, 0, sizeof(buf))//9....先清一下接收缓存是个好习惯

int n = recv(a,buf,sizeof buf, 0)//3, 建议改用recv

//7...建议在这儿加上茄清判断RECV返回值n有效否

cout<<buf

return 0

}

在出错函高漏搏数(socket)后面用printf("%m\n")打印出来可以知道出错的原因

%m表示errno和strerror(errno)

或者不怕麻烦的话添加头文件<error.h>

然后还是在出错的函数socket()后面添加打印信息搜橡printf("%d|%s\n", error, strerror(errno))

error表示该函数的出错码,后面的表示英文解释,具体的可以在linux下用慢查找

虽然这个办法笨了点。但是我只会这种方法....

你有抓包看了吗 linux下用tcpdump -w抓到本地来看 本地戚祥用wireshark抓 一抓包啥东西都清清楚楚


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/tougao/8167233.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存