一个简单的TCP套接字编程实例
来源:互联网 发布:样本册软件 编辑:程序博客网 时间:2024/04/29 06:19
采用一个服务器程序对应一个客户的方法,服务器不需要采取任何并发技术,执行TCP套接字服务端的基本过程是创建套接字,绑定套接字,监听,接收请求,读/写数据和终止连接。
服务器源程序:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cstdio>
#include <cstdlib>
#define PORT 1234 //端口号
#define BACKLOG 1 //所允许的连接数量
int main()
{
int socketfd,connectfd; //描述符
struct sockaddr_in server; //服务器地址
struct sockaddr_in client; //客户地址
if((socketfd=socket(AF_INET,SOCK_STREAM, 0))==-1) //产生tcp套接字
{
perror("socket failed\n");
exit(1);
}
int opt=SO_REUSEADDR; //允许本地地址被重用
setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
bzero(&server, sizeof(server)); //初始化
server.sin_family=AF_INET; //tcp套接字
server.sin_port=htons(PORT); //将端口转换为网络字序
server.sin_addr.s_addr=htonl(INADDR_ANY); //内核选择ip
if(bind(socketfd, (structsockaddr *)&server,sizeof(server))==-1) //将套接字绑定到指定的协议地址
{
perror("Bind error\n");
exit(1);
}
if(listen(socketfd,BACKLOG)==-1) //监听 (如果没有请求,则被阻塞,进入休眠状态)
{
perror("listen error\n");
exit(1);
}
socklen_t sin_size=sizeof(structsockaddr_in);
if ((connectfd=accept(socketfd, (structsockaddr *)&client,&sin_size))==-1) //接收请求
{
perror("accept error\n");
exit(1);
}
printf("you got a connection form %s\n",inet_ntoa(client.sin_addr));
send(connectfd, "hello\n", 6, 0); //发送信息
close(connectfd);
close(socketfd);
return 0;
}
客户端TCP套接字的基本过程:创建套接字,与服务器程序连接,读/写数据和终止连接。
客户端程序:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <cstdlib>
#define PORT 1234 //定义端口号
#define MAXDATASIZE 100 //定义缓冲区的大小
int main()
{
int socketfd,numberbytes; //文件描述符
char buf[MAXDATASIZE]; //缓冲区,用来存储接收到的文本
struct hostent *host; //该结构体用来获取本地路由的信息
struct sockaddr_in server; //服务器端地址信息
if ((host=gethostbyname("127.0.0.1"))==NULL)
{
printf("gethostbyname error\n");
exit(1);
}
if ((socketfd=socket(AF_INET,SOCK_STREAM, 0))==-1)
{
printf("socket error\n");
exit(1);
}
bzero(&server, sizeof(server));
server.sin_family=AF_INET; //tcp套接字类型
server.sin_port=htons(PORT); //将端口转换成网络字序
server.sin_addr=*((in_addr *)host->h_addr); //服务器地址
if (connect(socketfd, (structsockaddr*)&server, sizeof(struct sockaddr))==-1) //建立连接
{
perror("connect error\n");
exit(1);
}
if((numberbytes=recv(socketfd, buf,100, 0))==-1) //获取消息
{
printf("recv error\n");
exit(1);
}
buf[numberbytes]='\0';
printf("server message:%s\n",buf);
close(socketfd); //关闭连接
return 0;
}
先运行服务器端,在运行客服端即可。
- 一个简单的TCP套接字编程实例
- python 网络编程 TCP套接字实例
- TCP套接字编程实例(一)
- TCP套接字编程实现简单的并发服务器
- linux中一个简单的TCP套接字程序(2)
- linux套接字编程笔记(二)--简单的TCP套接字应用程序
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- TCP套接字编程
- 基本的TCP套接字编程
- ubuntu14.04下载android source code
- app 提交 app store 遇到的问题
- 苹果开发 笔记(77)NSJSONSerialization
- 个人学习笔记---linux进程地址空间
- libsvm-mat上手
- 一个简单的TCP套接字编程实例
- 网络编程
- 那些C++牛人的博客
- POJ 2236 A - Wireless Network[kuangbin带你飞]专题五 并查集
- 仿迅雷下载球
- module_init 和 late_initcall 区别
- 错误——持续更新
- $_FILES[]['type']类型
- ios-新浪微博开发-13-新特性(1)