求socket大神帮我把这服务端和用户端的字符串传输形式改成文件的,就接收和发送的函数变成发送文件的函数

qq_28715669 2017-09-19 05:39:39
client端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

void* sendMsg(void * socket)

{
int sock = *((int*)socket);
while(1){
char msg[4096];

memset(msg,0, sizeof(msg));
gets(msg);
size_t outputlength = strlen(msg);
// ssize_t bytecount = send(sock, msg, outputlength, 0);//发送消息
if (send(sock, msg, outputlength, 0)< 0) {
printf("send failed\n");
}
}
}
void* recvMsg(void * socket)

{

int sock = *((int*)socket);
while(1){
char msg[4096];
memset(msg, 0, sizeof(msg));
//ssize_t bytecount = recv(sock, msg, sizeof(msg), 0); //接收消息

if (recv(sock, msg, sizeof(msg), 0) >0) {

puts(msg);
//printf("recv:%d",msg);
}
} }



int main(int argc,char * argv[])

{ pthread_t recv;
pthread_t send;
int port = 7777;
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//AF_INET指明使用ipv4,sock_stream指定使用流套接字,ipproto_tcp指定使用tcp协议
if (sock < 0) {

printf("socket error\n");

}
struct sockaddr_in servAddr;//结构体用于存放地址
memset(&servAddr, '\0', sizeof(struct sockaddr_in));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]);
servAddr.sin_port = htons(port);
printf("servAddr=%#x,port=%#x\r\n",servAddr.sin_addr.s_addr,servAddr.sin_port);
if (servAddr.sin_addr.s_addr == 0) {

printf("address wrong ,inet_pton() failed\n");

}
else
if (servAddr.sin_addr.s_addr < 0) {

printf("inet_pton() failed");
}

if(connect(sock, (struct sockaddr*)&servAddr, sizeof(servAddr)) < 0)//连接到服务器
{
printf("connect failed\n");
}
printf("connect ok!\r\n");
pthread_create(&recv, NULL, recvMsg, &sock);

pthread_create(&send, NULL, sendMsg, &sock);

pthread_join(recv, 0);

pthread_join(recv, 0);

close(sock);

}

server端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
void* receiveMsg(void *sock)

{
char buffer[4096];

int* socket = (int*)sock;

while (1) {


memset(buffer,0,sizeof(buffer));

ssize_t byteCount = recv(*socket, buffer, 4096, 0);

if(byteCount <= 0) {

continue;

}
puts(buffer);
}

}
void* sendMsg(void* sock)

{

while (1) {

usleep (500);

char buffer[4096];

memset(buffer, 0, sizeof(buffer));
gets(buffer);
//scanf("% c",&buffer);
if(strlen(buffer) < 0)

{

continue;

}

ssize_t byteCount = send(*(int*)sock, buffer, 4096, 0);

if(byteCount < 0)

{



printf("send failed\n");

}


}

}



int main()

{

pthread_t sendPthread;
pthread_t recvPthread;
in_port_t servPort = 7777;


int servSock;
if ((servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)//创建socket

{
printf ("socket error\n");

}

struct sockaddr_in servAddr;

memset(&servAddr, '\0', sizeof(struct sockaddr_in));
servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);//让系统自动填充地址,不用自己去查明本机的地址是多少

servAddr.sin_port = htons(servPort);
if(bind(servSock, (struct sockaddr*)&servAddr, sizeof(servAddr)) < 0) //把套接字绑定到 指定的地址与端口

{

printf("bind error\n");

}
printf("bind ok\n");
if(listen(servSock, 5)< 0)//开始监听,等待客户 端的连接,listen调用之前,客户端无法连接到服务端第二个参数为最大连接数

{

printf("listen filed\n");

}
printf("listen ok\n");
struct sockaddr_in clntAddr;


socklen_t clntAddrLen = sizeof(clntAddr);

int clntSock = accept(servSock, (struct sockaddr*)&clntAddr, &clntAddrLen);
if (clntSock < 0)

{

//cout << "accept error" << endl;
printf("accept error\n");

}

char clntName[1024];
if (inet_ntop(AF_INET, &clntAddr.sin_addr.s_addr, clntName, sizeof (clntName)) != NULL) {
puts(clntName);
printf("port:%d",ntohs(clntAddr.sin_port));
}
else {
printf("client address get failed\n");
}

pthread_create (&sendPthread, NULL, sendMsg, &clntSock);

pthread_create (&recvPthread, NULL, receiveMsg, &clntSock);
pthread_join (sendPthread, 0);
pthread_join(recvPthread, 0);

}


学校的作业 就是用socket网络编程在单片机上实现信息传递,但是这个只实现了字符串,我需要把他变成传输文件的,我本身实在是经验不足,道行太浅 希望大神帮我把里面的接受和发送函数直接改成收发文件的,感激不尽。
...全文
1573 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧