两个终端的socket通信问题
客户端代码及ip:192.168.0.112
#include <WinSock2.h>
#include <stdio.h>
SOCKADDR_IN addrSrv;
SOCKET sockSvr;
SOCKADDR_IN sockCli;
enum
{
FILE_ERROR = -1,//文件打开失败返回
FILE_SUCCEED,//文件打开成功返回
};
//绑定ip地址和端口号
int InitCliSocket(char *ipAdress, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int nRes = 0;
int nErrCode = 0;
int bExit = 0;
wVersionRequested = MAKEWORD(1, 1);
nRes = WSAStartup(wVersionRequested, &wsaData);
if (0 != nRes)
{
printf("err code:%d", WSAGetLastError());
return 0;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
printf("VERSION DIFF");
WSACleanup();
return 0;
}
sockSvr = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockSvr)
{
printf("err code:%d", WSAGetLastError());
return 0;
}
//绑定IP地址,端口号
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = inet_addr(ipAdress);
addrSrv.sin_port = htons(port);
nRes = bind(sockSvr, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (SOCKET_ERROR == nRes)
{
printf("err code:%d", WSAGetLastError());
return 0;
}
return 1;
}
int sendmsg(char *buf)
{
//SOCKADDR_IN sockCli;
int nLen = sizeof(SOCKADDR_IN);
sendto(sockSvr, buf, strlen(buf), 0, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
memset(buf, 0, strlen(buf));
recvfrom(sockSvr, buf, 1024, 0, (SOCKADDR*)&sockCli, &nLen);
return 0;
}
int main()
{
char *fname = "e:\\main.c";
FILE *fp = NULL;
FILE *fp1 = NULL;
char str[1024] = {0};
int nRes;
//打开需要读出的文件失败
if ((fp = fopen(fname,"r")) == NULL)
{
printf("can not open the file!");
return FILE_ERROR;
}
nRes = InitCliSocket("192.168.0.103", 6000);
if (nRes == 0)
{
printf("连接失败!");
return 0;
}
printf("开始发送数据!");
//读取一行数据
while ((fgets(str, 1000, fp)) != NULL)
{
printf("!!!!");
sendmsg(str);
}
printf("数据发送完毕!");
//关闭socket
closesocket(sockSvr);
//文件读取完毕,关闭文件
fclose(fp);
fp = NULL;
system("pause");
return 1;
}
#include <WinSock2.h>
#include <stdio.h>
#include <string.h>
int initsocket()
{
WORD wVersionRequested;
WSADATA wsaData;
int nRes = 0;
SOCKET sockSvr;
int nErrCode = 0;
int bExit = 0;
SOCKADDR_IN addrSrv;
char *fname = "e:\\d.txt";
FILE *fp = NULL;
wVersionRequested = MAKEWORD(1, 1);
nRes = WSAStartup(wVersionRequested, &wsaData);
if (0 != nRes)
{
printf("err code:%d\n", WSAGetLastError());
return 0;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
printf("VERSION DIFF");
WSACleanup();
return 0;
}
sockSvr = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockSvr)
{
printf("err code:%d", WSAGetLastError());
return 0;
}
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.0.101");
addrSrv.sin_port = htons(6000);
nRes = bind(sockSvr, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (SOCKET_ERROR == nRes)
{
printf("err code:%d", WSAGetLastError());
printf("4");
return 0;
}
printf("连接成功!");
while (!bExit)
{
SOCKADDR_IN sockCli;
char buf[1024] = {0};
int nLen = sizeof(SOCKADDR_IN);
int nRes;
int res = 0;
res = recvfrom(sockSvr, buf, 1024, 0, (SOCKADDR*)&sockCli, &nLen);
if (0 == res)
{
printf("err code:%d", WSAGetLastError());
return 0;
}
if ((fp = fopen(fname, "a+")) == NULL)
{
printf("can not open the file!");
return 0;
}
//写入到文件
nRes = fwrite(buf, 1, strlen(buf), fp);
if (nRes != 0)
{
printf(buf);
}
fclose(fp);
fp = NULL;
sendto(sockSvr, buf, strlen(buf)+1, 0, (SOCKADDR*)&sockCli, sizeof(SOCKADDR));
}
closesocket(sockSvr);
return 0;
}
int main()
{
initsocket();
system("pause");
return 1;
}