
#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抓 一抓包啥东西都清清楚楚
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)