64,654
社区成员
发帖
与我相关
我的任务
分享
//client.cpp 发送new.csv文件内容
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <sstream>
#include "winsock.h"
#pragma warning(disable:4996)
#pragma comment(lib, "wsock32")
using namespace std;
struct TcsvMake
{
int bianhao;
string CELLCODE;
string IP;
string C_hao;
int EPC;
int RCS;
};
int main()
{
int ret = 0;
WSADATA wsadata;
WORD version = MAKEWORD(2, 0);
ret = WSAStartup(version, &wsadata);
SOCKET m_hClientSocket;
m_hClientSocket = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN m_addr1;
m_addr1.sin_family = AF_INET;
m_addr1.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
m_addr1.sin_port = htons(10000);
ret = connect(m_hClientSocket, (LPSOCKADDR)&m_addr1, sizeof(m_addr1));
//使用结构体转换成字符串发送,在服务器端直接转为结构体
TcsvMake msg1;
TcsvMake tcsv;
fstream input("new.csv", ios::in);
string csvLine;
// 从输入流中读取每一行
getline(input, csvLine);
while (getline(input, csvLine))
{
char *csv = (char*)csvLine.data();
if (NULL != csv)
{
string bianhao = strtok(csv, ",");
istringstream csvStream(bianhao);
csvStream >> tcsv.bianhao;
string CELLCODE = strtok(NULL, ",");
istringstream CsvStream(CELLCODE);
CsvStream >> tcsv.CELLCODE;
string ip = strtok(NULL, ",");
istringstream cSvStream(ip);
cSvStream >> tcsv.IP;
string Chao = strtok(NULL, ",");
istringstream csVStream(Chao);
csVStream >> tcsv.C_hao;
string EPC = strtok(NULL, ",");
istringstream CSvStream(EPC);
CSvStream >> tcsv.EPC;
string RCS = strtok(NULL, ",");
istringstream CSVStream(RCS);
CSVStream >> tcsv.RCS;
}
//以字符串形式发送,因为TCP/IP是字节流通信
int len_send = send(m_hClientSocket, (char *)&tcsv, sizeof(TcsvMake), 0);
}
closesocket(m_hClientSocket);
WSACleanup();
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
//创建socket编程环境
int ret = 0;
WSADATA wsadata;
WORD version = MAKEWORD(2, 0);
ret = WSAStartup(version, &wsadata);
//服务器端口创建
SOCKET m_hServerSocket;
m_hServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == m_hServerSocket)
{
cout << "服务器socket创建失败!" << endl;
return 0;
}
else
{
cout << "服务器socket创建成功" << endl;
}
cout << endl;
//服务器端口绑定
SOCKADDR_IN m_addr;
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(9898);
ret = bind(m_hServerSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));
//服务器端口开始监听
ret = listen(m_hServerSocket, 20);//第二个参数指定最大申请的连接数
//每当有一个客户端连接申请,则服务器端创建一个线程对其进行处理,模拟数据库服务器的处理方式
SOCKET com_Sock;
SOCKADDR_IN clntaddr;
int clnlen = sizeof(clntaddr);
TcsvMake msg2;
while (1)
{
int count = 0;
com_Sock = accept(m_hServerSocket, (SOCKADDR *)&clntaddr, &clnlen);
//获得当前正在通信的socket的IP和端口地址
getsockname(com_Sock, (SOCKADDR *)&clntaddr, &clnlen);
while(1){
memset(&msg2, 0, sizeof(TcsvMake));
ret = recv(com_Sock, (char*)&msg2, sizeof(msg2), 0);
if(ret >0)
{
cout << msg2.IP << ",";
cout << msg2.C_hao << ",";
cout << msg2.EPC << endl;
}else
break;
}
}
closesocket(com_Sock);
WSACleanup();
return 0;
}
[/quote]
哎,又可以了,谢谢你啊,还有,我是女生int _tmain(int argc, _TCHAR* argv[])
{
//创建socket编程环境
int ret = 0;
WSADATA wsadata;
WORD version = MAKEWORD(2, 0);
ret = WSAStartup(version, &wsadata);
//服务器端口创建
SOCKET m_hServerSocket;
m_hServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == m_hServerSocket)
{
cout << "服务器socket创建失败!" << endl;
return 0;
}
else
{
cout << "服务器socket创建成功" << endl;
}
cout << endl;
//服务器端口绑定
SOCKADDR_IN m_addr;
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(9898);
ret = bind(m_hServerSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));
//服务器端口开始监听
ret = listen(m_hServerSocket, 20);//第二个参数指定最大申请的连接数
//每当有一个客户端连接申请,则服务器端创建一个线程对其进行处理,模拟数据库服务器的处理方式
SOCKET com_Sock;
SOCKADDR_IN clntaddr;
int clnlen = sizeof(clntaddr);
TcsvMake msg2;
while (1)
{
int count = 0;
com_Sock = accept(m_hServerSocket, (SOCKADDR *)&clntaddr, &clnlen);
//获得当前正在通信的socket的IP和端口地址
getsockname(com_Sock, (SOCKADDR *)&clntaddr, &clnlen);
while(1){
memset(&msg2, 0, sizeof(TcsvMake));
ret = recv(com_Sock, (char*)&msg2, sizeof(msg2), 0);
if(ret >0)
{
cout << msg2.IP << ",";
cout << msg2.C_hao << ",";
cout << msg2.EPC << endl;
}else
break;
}
}
closesocket(com_Sock);
WSACleanup();
return 0;
}
while (1)
{
int count = 0;
com_Sock = accept(m_hServerSocket, (SOCKADDR *)&clntaddr, &clnlen);
//获得当前正在通信的socket的IP和端口地址
getsockname(com_Sock, (SOCKADDR *)&clntaddr, &clnlen);
/*char recv_msg[8000];
memset(recv_msg, 0, 8000);
ret = recv(com_Sock, recv_msg, sizeof(recv_msg), 0);*/
// 一共600行数据
for (int j = 0; j <600; j++)
{
memset(&msg2, 0, sizeof(TcsvMake));
ret = recv(com_Sock, (char*)&msg2, sizeof(msg2), 0);
//直接将接收到的字节流拷贝给相应的结构体即可。
for (int i = 0; i *sizeof(TcsvMake) < ret; i++)
{
memset(&msg2, 0, sizeof(TcsvMake));
//memcpy(&msg2, recv_msg + i*sizeof(TcsvMake), sizeof(TcsvMake));
ret = recv(com_Sock, (char*)&msg2 + i*sizeof(TcsvMake), sizeof(msg2), 0);
cout << msg2.IP << ",";
cout << msg2.C_hao << ",";
cout << msg2.EPC << endl;
}
}
}
最后一行还有点问题,不过非常感谢了!while (1)
{
int count = 0;
com_Sock = accept(m_hServerSocket, (SOCKADDR *)&clntaddr, &clnlen);
//获得当前正在通信的socket的IP和端口地址
getsockname(com_Sock, (SOCKADDR *)&clntaddr, &clnlen);
/*char recv_msg[8000];
memset(recv_msg, 0, 8000);
ret = recv(com_Sock, recv_msg, sizeof(recv_msg), 0);*/
memset(&msg2, 0, sizeof(TcsvMake));
ret = recv(com_Sock, (char*)&msg2, sizeof(msg2), 0);
//直接将接收到的字节流拷贝给相应的结构体即可。
for (int i = 0; i *sizeof(TcsvMake) < ret; i++)
{
//memcpy(&msg2, recv_msg + i*sizeof(TcsvMake), sizeof(TcsvMake));
ret = recv(com_Sock, (char*)&msg2 + i*sizeof(TcsvMake), sizeof(msg2), 0);
cout << msg2.IP << ",";
cout << msg2.C_hao << ",";
cout << msg2.EPC << endl;
}
closesocket(com_Sock);
}
//server.cpp
#include <iostream>
#include <stdio.h>
#include <string>
#include "winsock.h"
#pragma comment(lib, "wsock32")
#pragma warning(disable:4996)
using namespace std;
struct TcsvMake
{
int bianhao;
string CELLCODE;
string IP;
string C_hao;
int EPC;
int RCS;
};
int main()
{
//创建socket编程环境
int ret = 0;
WSADATA wsadata;
WORD version = MAKEWORD(2, 0);
ret = WSAStartup(version, &wsadata);
//服务器端口创建
SOCKET m_hServerSocket;
m_hServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == m_hServerSocket)
{
cout << "服务器socket创建失败!" << endl;
return 0;
}
else
{
cout << "服务器socket创建成功" << endl;
}
cout << endl;
//服务器端口绑定
SOCKADDR_IN m_addr;
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(10000);
ret = bind(m_hServerSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));
//服务器端口开始监听
ret = listen(m_hServerSocket, 20);//第二个参数指定最大申请的连接数
//每当有一个客户端连接申请,则服务器端创建一个线程对其进行处理,模拟数据库服务器的处理方式
SOCKET com_Sock;
SOCKADDR_IN clntaddr;
int clnlen = sizeof(clntaddr);
TcsvMake msg2;
while (1)
{
int count = 0;
com_Sock = accept(m_hServerSocket, (SOCKADDR *)&clntaddr, &clnlen);
//获得当前正在通信的socket的IP和端口地址
getsockname(com_Sock, (SOCKADDR *)&clntaddr, &clnlen);
char recv_msg[8000];
memset(recv_msg, 0, 8000);
ret = recv(com_Sock, recv_msg, sizeof(recv_msg), 0);
//直接将接收到的字节流拷贝给相应的结构体即可。
memset(&msg2, 0, sizeof(TcsvMake));
memcpy(&msg2, recv_msg, sizeof(TcsvMake));
cout << msg2.IP << ",";
cout << msg2.C_hao << ",";
cout << msg2.EPC << endl;
}
closesocket(com_Sock);
WSACleanup();
return 0;
}
只接收到文件第一行数据,请问有什么问题吗?