基于TCP的server和client编写。
来源:互联网 发布:everything是什么软件 编辑:程序博客网 时间:2024/05/22 14:54
首先看一下大家都了解c/s架构。
先讲解server的搭建:
创建TCP套接字:
设置基础信息为后面的bind()铺垫:
bind():
监听:
等待连接:
接收和发送:
client:客户端步骤就少很多了。
创建TCP套接字:
基本信息和连接:
发送和接收:
下面是源代码:
server:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
unsigned short port = 8000;
if(argc > 1)
{
port = atoi(argv[1]);
}
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
perror("sockfd");
exit(-1);
}
struct sockaddr_in my_addr;//本地信息
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;//设置地址族为IPv4
my_addr.sin_port = htons(port);//设置地址的端口号信息
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY服务器可以接收任意地址
int err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr));
if(err_log != 0)
{
perror("binding");
close(sockfd);
exit(-1);
}
err_log = listen(sockfd, 10);
if(err_log != 0)
{
perror("listen");
close(sockfd);
exit(-1);
}
printf("listen client %d\n",port);
struct sockaddr_in client_addr;
char cli_ip[INET_ADDRSTRLEN] = " ";
socklen_t client_len = sizeof(client_addr);
int connfd;
connfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_len);//等待连接
if(connfd < 0 )
{
perror("accept");
return -1;
//continue;
}
inet_ntop(AF_INET, &client_addr.sin_addr, cli_ip, INET_ADDRSTRLEN);//转换并打印信息
printf("********************************\n");
while(1)
{
char recv_buf[2048] = " ";
recv(connfd, recv_buf, sizeof(recv_buf), 0);//接收信息
printf("recv data:%s\n",recv_buf);
send(connfd, "ok", 2, 0);//向客户端发送数据
printf("ok\n");
}
close(sockfd);//关闭监听套接字
return 0;
}
client:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
unsigned short port = 8000;
char *server_ip = "192.168.0.111";
if(argc > 1)
{
server_ip = argv[1];
}
if(argc > 2)
{
port = atoi(argv[2]);
}
int sockfd = 0;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
perror("socket ");
exit(-1);
}
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_pton(AF_INET, server_ip, &server_addr.sin_addr);
int err_log = connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
if(err_log != 0)
{
perror("connect");
close(sockfd);
exit(-1);
}
while(1)
{
char send_buf[512] = " ";
char recv_buf[512] = " ";
printf("send data to %s:%d\n",server_ip, port);
printf("send:");
fgets(send_buf, sizeof(send_buf), stdin);
send_buf[strlen(send_buf)-1] = 0;
send(sockfd, send_buf, strlen(send_buf), 0);//向服务器发送数据
printf("send:%s\n",send_buf);
recv(sockfd, recv_buf, sizeof(recv_buf), 0);//接收数据
printf("recv:%s\n",recv_buf);
}
return 0;
}
- 基于TCP的server和client编写。
- 基于TCP/UDP的Server-Client
- 简单的TCP连接Server和Client
- 使用Java网络编程创建基于TCP协议的Server和Client
- 实现基于TCP/IP协议的简单Client/Server程序
- WINSOCK2 TCP client 和server
- linux下的tcp的server和client编程
- linux下TCP连接的client和server
- TCP的Server和Client通信—Java实现
- ROS学习(二)server和client的编写总结
- 使用openssl API编写client和server
- 使用openssl API编写client和server
- Python网络通信之socket模块(四)基于Tcp/Ip的TCP交互通信serve/client的编写过程
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
- TCP Client/Server 要考虑的问题
- scrapy一些介绍
- ajax跨域的头部定制
- vb.net 教程 4-5 文件操作 File 1
- Java经典算法40例(九)
- codeforces792E Colored Ball(贪心加枚举)
- 基于TCP的server和client编写。
- 梯度下降
- nginx反向代理原理
- 详解Response、Request一
- 微信小程序中 input空间输入文字如何清空
- 自定义圆圈进度条
- Java经典算法40例(十)
- 算法复习:数组中只出现一次的数字
- c#基础知识扩展篇2