客户端代码

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#define MAXLINE 4096
int main(int argc, char** argv){int   sockfd, len;char  buffer[MAXLINE];struct sockaddr_in  servaddr;FILE *fq;if( argc != 2){printf("usage: ./client <ipaddress>\n");return 0;}if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);return 0;}//获得fdmemset(&servaddr, 0, sizeof(servaddr));//初始化结构体servaddr.sin_family = AF_INET;//设置地址家族servaddr.sin_port = htons(6666);//设置端口if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){printf("inet_pton error for %s\n",argv[1]);return 0;}if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){printf("connect error: %s(errno: %d)\n",strerror(errno),errno);return 0;}if( ( fq = fopen("/home/zzy/Welcome.jpg","rb") ) == NULL ){printf("File open.\n");close(sockfd);exit(1);}bzero(buffer,sizeof(buffer));while(!feof(fq)){len = fread(buffer, 1, sizeof(buffer), fq);if(len != write(sockfd, buffer, len)){printf("write.\n");break;}}close(sockfd);fclose(fq);return 0;
}

服务端代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>#define MAXLINE 4096int main(int argc, char** argv){int  listenfd, connfd;struct sockaddr_in  servaddr;char  buff[4096];FILE *fp;int  n;if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);return 0;}printf("----init socket----\n");memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(6666);//设置端口可重用int contain;setsockopt(listenfd,SOL_SOCKET, SO_REUSEADDR, &contain, sizeof(int));if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);return 0;}printf("----bind sucess----\n");if( listen(listenfd, 10) == -1){printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);return 0;}if((fp = fopen("new1.jpg","ab") ) == NULL ){printf("File.\n");close(listenfd);exit(1);}printf("======waiting for client's request======\n");while(1){struct sockaddr_in client_addr;socklen_t size=sizeof(client_addr);if( (connfd = accept(listenfd, (struct sockaddr*)&client_addr, &size)) == -1){printf("accept socket error: %s(errno: %d)",strerror(errno),errno);continue;}while(1){n = read(connfd, buff, MAXLINE);if(n == 0)break;fwrite(buff, 1, n, fp);}buff[n] = '\0';printf("recv msg from client: %s\n", buff);close(connfd);fclose(fp);}close(listenfd);return 0;
}

简易Makefile文件

.PHONY: all clean TARGET1 = server
TARGET2 = client
all:$(TARGET1) $(TARGET2)
server:server.og++ -g -o server server.o
client:client.og++ -g -o client client.o
server.o:server.cppg++ -g -c server.cpp
client.o:client.cppg++ -g -c client.cpp
clean:allrm -f *.o all

socket编程c++相关推荐

  1. Windows Socket编程笔记之最简单的小Demo

    Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API-------  0.初始化         |  WSAStartup()  1.创建So ...

  2. Linux下Socket编程

    Linux下Socket编程    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...

  3. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*-"&qu ...

  4. C# Socket编程(5)使用TCP Socket

    TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer) ...

  5. 【.Net MF网络开发板研究-04】Socket编程之服务端

    前几篇文章介绍了Http相关的应用,其实从技术角度而言,应该先介绍Socket编程,然后再介绍Http,毕竟Http是用Socket相关函数编程实现的. .NET Micro Framework的So ...

  6. socket编程缓冲区大小对send()的影响

    1. 概述 Socket编程中,使用send()传送数据时,返回结果受到以下几个因素的影响: • Blocking模式或non-blocking模式 • 发送缓冲区的大小 • 接收窗口大小 本文档介绍 ...

  7. 华中科技大学计算机通信与网络实验,华中科技大学计算机通信与网络实验报告Socket编程实验.docx...

    实验一 Socket编程实验 1.1环境 开发环境:Windows 10 64 位,Intel Core i5-7300HQ CPU, 8GB 内存 1.1. 1开发平台 Microsoft Visu ...

  8. socket recv 服务端阻塞 python_网络编程(基于socket编程)

    网络编程(基于socket编程) socket套接字:应用程序通常通过socket"套接字"向网络发送请求或应答网络请求,是主机间或同一计算机中的进程间相互通讯 socket是介于 ...

  9. python的socket编程_Python Socket编程详细介绍

    在使用Python做socket编程时,由于需要使用阻塞(默认)的方式来读取数据流,此时对于数据的结束每次都需要自己处理,太麻烦.并且网上也没找到太好的封装,所以就自己写了个简单的封装. 封装思路 1 ...

  10. python 图形化socket编程_Python黑帽编程2.8 套接字编程

    Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...

最新文章

  1. camera摄像原理之三:色温和自动白平衡【转】
  2. Java关键字this、super使用总结
  3. The Power of Ten – Rules for Developing Safety Critical Code
  4. 前端框架MVC/MVVM分析系列
  5. linux搭建gitlab
  6. 碰撞的小球 ccf (模拟)
  7. Hanlp之理解用户自定义词典(java版本)
  8. cloud一分钟 | 腾讯云联手斗鱼、虎牙两大头部游戏直播平台开启 定制道具的创新互动...
  9. 简单谈谈setTimeout与setInterval
  10. sqlmap源码阅读系列检查是否满足依赖
  11. java(jeecg框架) 调用CXF WebService接口的两种方式
  12. python:等间距分割pdf文件
  13. 北京移动电信联通校园卡,以及各种流量卡申请入口合辑!
  14. 网站内容采集工具介绍
  15. 英特尔TCI技术落地,锐捷网络发布OCS终端云化新品
  16. bigemap最近更新功能列表
  17. excel - 按钮编程 -脚本编程 - VBA
  18. Day25(线程同步安全问题,SellticketLock,DieLock,ThredGroup,ThreadPool,Timer,线程安全的类,匿名内部类的形式创建线程对象)
  19. OpenCore-Legacy-Patcher 0.5.1正式版
  20. 数据可视化工具(QBarSeries柱状图)

热门文章

  1. 云计算教程:小型云计算平台怎么搭建?
  2. VirtualBox 无法安装 已删除了注册表及文件
  3. 多次调用 BAPI 之后,最后一次性 COMMIT WORK,会有什么问题吗?
  4. 家庭媒体中心NAS方案设计
  5. 新政举市暖冬再现? 业内乐观情绪高涨
  6. 7654:等差数列末项计算
  7. UMLChina建模竞赛第3赛季第7轮:假烟假酒假朋友,假情假意假温柔
  8. 达内java月考_达内java5.第二次月考(附答案)..doc
  9. 如何制作微信二维码指纹扫描图片
  10. Python Csv TypeError: a bytes-like object is required, not ‘str‘