自己用socket实现发送图片(入门级)

时间:2022-05-11 00:28:02
/***********************************
 
 file_client.c send jpg
 
************************************/

#include <netinet/in.h>    // for sockaddr_in
#include <sys/types.h>    // for socket
#include <sys/socket.h>    // for socket
#include <stdio.h>        // for printf
#include <stdlib.h>        // for exit
#include <string.h>        // for bzero


#define SERVER_PORT 6666
#define BUFFER_SIZE 1024
#define FLAG 10
#define FILE_NAME_MAX_SIZE 512
#define JPG "./1.JPG"

int main(void)
{
struct sockaddr_in client_addr;
struct sockaddr_in server_addr;
int i;
char buf[BUFFER_SIZE];
char flag[FLAG];
int num=0;

memset(flag,0,FLAG);
memset(buf,0,BUFFER_SIZE);
memset(&client_addr,0,sizeof(client_addr));

client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = inet_addr("192.168.149.128"); 
client_addr.sin_port = htons(0);

int client_socket = socket(AF_INET,SOCK_STREAM,0);
if( client_socket < 0)
{
printf("Create Socket Failed!\n");
exit(1);
}
printf("#Socket is created!#\n");
printf("#The socket id is :%d#\n",client_socket);

if(bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))
{
printf("Client Bind Port Failed!\n"); 
close(client_socket);
for(i=0;i<3;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}
printf("\n");
exit(1);
}
else
{
sleep(1);
printf("#Bind ip success!#\n");
}

memset(&server_addr,0,sizeof(server_addr));

server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(SERVER_PORT);

socklen_t server_addr_length = sizeof(server_addr);
if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)
{
printf("Can Not Connect To!");
for(i=0;i<3;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}
printf("\n");
close(client_socket);
exit(1);
}
sleep(1);
printf("#Connect sever success!#\n");

FILE *fp;

fp=fopen(JPG,"rb");

if(NULL == fp)
{
printf("File open error!\n");
close(client_socket);
}
strcpy(flag,"start");
send(client_socket,flag,FLAG,0);
printf("*send start flag*\n");
sleep(1);
recv(client_socket,flag,FLAG,0);

if(strcmp(flag,"ok")!=0)
{
printf("communicate failed ...\n");
for(i=0;i<60;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}
printf("\n");
}
printf("*yanzheng success start to send*\n");
rewind(fp);
while(0==feof(fp))
{
fread(buf,BUFFER_SIZE,1,fp);
send(client_socket,buf,BUFFER_SIZE,0);
printf(".%d",num);
num++;
}
printf("\n");
memset(buf,0,BUFFER_SIZE);

strcpy(buf,"end");
send(client_socket,buf,BUFFER_SIZE,0);
printf("*Send the end flag!*\n");
for(i=0;i<10;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}

fclose(fp);
close(client_socket);
return 0;
}







。。。。。。。


/*********************************************************

file_server.c accept jpg

*********************************************************/

#include <netinet/in.h>    // for sockaddr_in
#include <sys/types.h>    // for socket
#include <sys/socket.h>    // for socket
#include <stdio.h>        // for printf
#include <stdlib.h>        // for exit
#include <string.h>        // for memset


#define SERVER_PORT    6666  /*  port  */
#define LENGTH_OF_LISTEN_QUEUE  20
#define BUFFER_SIZE 1024
#define FLAG 10
#define FILE_NAME_MAX_SIZE 512
#define REC_JPG "./rec_1.JPG"


int main(void)
{
int server_socket;
int new_server_socket;
char buffer[BUFFER_SIZE];
char flag[FLAG];

socklen_t length;

int i;
int num=0;

struct sockaddr_in server_addr;//sever socket
struct sockaddr_in client_addr;//communicate with client socket

memset(flag,0,FLAG);
memset(buffer,0, BUFFER_SIZE);
memset(&server_addr,0,sizeof(server_addr));

server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //INADDR_ANY   "127.0.0.1"
server_addr.sin_port = htons(SERVER_PORT);

server_socket = socket(PF_INET,SOCK_STREAM,0);//


length = sizeof(client_addr);

if( server_socket < 0)
{
printf("########Create Socket Failed!########\n");
exit(1);
}
printf("#Socket is created!#\n");
printf("#The socket id is :%d#\n",server_socket);
if(bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))<0)
{
printf("########Server Bind Port : %d Failed!########\n", SERVER_PORT); 
exit(1);
}
else
{
sleep(1);
printf("#Bind ip success!#\n");
printf("#The bind port is :%d#\n",SERVER_PORT);
}

if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )
{
printf("########Server Listen Failed!########\n");
exit(1);
}
sleep(1);
printf("#Severs is listening!#\n");
while (1) 
{
new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
if ( new_server_socket < 0)
{
printf("########Server Accept Failed!########\n");
break;
}
printf("#Client connect success!..accept#\n");

recv(new_server_socket,flag,FLAG,0);

if(strcmp(flag,"start")!=0)
{
printf("communicate failed ...\n");
for(i=0;i<60;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}
printf("\n");
}
printf("*recv the start flag from client*\n");
strcpy(flag,"ok");
send(new_server_socket,flag,FLAG,0);
printf("*huifu client*\n");
FILE *fp;
fp=fopen(REC_JPG,"wb+");
if(NULL==fp)
{
printf("file open error!\n");
exit(1);
}
while(1)
{
recv(new_server_socket,buffer,BUFFER_SIZE,0);
if(strcmp(buffer,"end")==0)
{
printf("\n");
printf("*Recive the end flag!*");
for(i=0;i<5;i++)
{
printf(".");
fflush(stdout);
sleep(1);
}

close(new_server_socket);
close(server_socket);
return 0;
}
fwrite(buffer,BUFFER_SIZE,1,fp);
printf(".%d",num);
num++;
fflush(fp);
}


close(new_server_socket);
}
close(server_socket);
return 0;
}

7 个解决方案

#1


自己走起! 自己用socket实现发送图片(入门级)

#2


自己用socket实现发送图片(入门级)

#3


猜猜我是谁 自己用socket实现发送图片(入门级)

#4


你妈逼看着累不累???

#5


自己用socket实现发送图片(入门级)

#6


引用 4 楼 Pc498471249 的回复:
你妈逼看着累不累???

为嘛要爆粗我!!!

#7


引用 5 楼 porenasckx 的回复:
自己用socket实现发送图片(入门级)

自己用socket实现发送图片(入门级)

#1


自己走起! 自己用socket实现发送图片(入门级)

#2


自己用socket实现发送图片(入门级)

#3


猜猜我是谁 自己用socket实现发送图片(入门级)

#4


你妈逼看着累不累???

#5


自己用socket实现发送图片(入门级)

#6


引用 4 楼 Pc498471249 的回复:
你妈逼看着累不累???

为嘛要爆粗我!!!

#7


引用 5 楼 porenasckx 的回复:
自己用socket实现发送图片(入门级)

自己用socket实现发送图片(入门级)