LINUX下如何创建TCP客户端和服务器,实现通信
来源:互联网 发布:人工智能类电影 编辑:程序博客网 时间:2024/05/29 16:49
TCP的客户端和服务器的创建
1.socket是属于LINUX下的进程间通信的一种方式BSD,(socket)套接字。
既可以实现同一台主机间的进程间通信,也可以实现不同主机间的进程间通信,
也是操作系统给应用程序提供的用于网络通信的接口。
在Linux下,由于一切皆文件,所以socket也是一种文件。可以通过文件描述符去操作。
2.IP号:主机的唯一标识。
子网掩码:用于判断数据包向外网还是向内网发送。
IP地址在使用必须转换为二进制形式(inet_addr)。
对应的端口号转换(htons);
IP区分主机,端口号区分进程。
3.客户端的创建(对应的函数)
(1)创建SOCKET套接字 (socket)
(2)绑定地址信息(bind)(这一步骤可以省略,系统会自动分配)
(3)发送连接请求(connect)
(4)收发消息(send/recv)
(5)关闭套接字 (close)
4.服务器的创建(对应的函数)
(1)创建SOCKET套接字 (socket)
(2)绑定地址信息(bind)(服务器对应的IP地址和端口号)
(3)创建一个监听队列(listen)
(4)接受连接请求 (accept)
(5)收发消息 (send/recv)
(6)关闭套接字 (close)
写的不好,希望海涵。
下面就是具体的代码客户端xldClient.c如下:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>int main(){ //定义Internet协议结构,客户端的IP信息 struct sockaddr_in myaddr; memset(&myaddr,0,sizeof(myaddr)); myaddr.sin_family = PF_INET; myaddr.sin_port = htons(1314); myaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //1.创建套接字 int clientId = socket(PF_INET,SOCK_STREAM,0); if(clientId<0) { perror("socket\n"); return -1; } printf("socket ok\n"); //2发起链接请求 int ret = connect(clientId,(struct sockaddr *)&myaddr,sizeof(myaddr)); if(ret <0) { perror("connect\n"); close(clientId); return -1; } printf("connect ok\n"); // 3接收消息 while(1) { char buf[1024]; memset(buf,0,1024); ret = recv(clientId,buf,sizeof(buf),0); if(ret<0) { perror("recv\n"); close(clientId); return -1; } printf("received from xldserver:%s\n",buf); memset(buf,0,1024); printf("xldclient: "); gets(buf); if(strcmp(buf,"quit")==0) { break; } ret=send(clientId,buf,sizeof(buf),0); if(ret<0) { perror("send\n"); close(clientId); return -1; } } //4.关闭套接字 close(clientId); return 0;}
下面是服务器的具体代码 xldServer.c 如下
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <arpa/inet.h>#include <unistd.h>int main(){ //定义Internet协议结构,服务器的端口号和IP地址 struct sockaddr_in myaddr; memset(&myaddr,0,sizeof(myaddr)); myaddr.sin_family = PF_INET; myaddr.sin_port = htons(1314); myaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //1.创建套接字 int serverId = socket(PF_INET,SOCK_STREAM,0); if(serverId<0) { perror("serverFd\n"); return -1; } printf("socket ok\n"); //2.绑定地址信息 int ret = bind(serverId,(struct sockaddr *)&myaddr,sizeof(myaddr)); if(ret<0) { perror("bind\n"); close(serverId); return -1; } printf("bind ok\n"); //3.创建一个监听队列 if(listen(serverId,10)<0) { perror("listen\n"); close(serverId); return -1; } printf("listening....\n"); //4.接受链接请求 int conId=accept(serverId,NULL,NULL); if(conId<0) { perror("accept\n"); close(serverId); return -1; } printf("accept ok\n"); //5.收发消息 while(1) { char buf[1024]; memset(buf,0,1024); printf("please input message (to xldclient)\n"); gets(buf); if(strcmp(buf,"quit")==0) { break; } ret = send(conId,buf,sizeof(buf),0); if(ret <0) { perror("send\n"); close(serverId); close(conId); return -1; } ret = recv(conId,buf,sizeof(buf),0); if(ret<0) { perror("recv\n"); close(serverId); close(conId); return -1; } printf("from xldclient:%s\n",buf); } //6.关闭套接字 close(serverId); close(conId); return 0;}
阅读全文
0 0
- LINUX下如何创建TCP客户端和服务器,实现通信
- TCP实现客户端和服务器的通信
- Linux 网络编程实现TCP协议下的服务器客户端通信
- 服务器和客户端 tcp通信
- java 通过 socket 实现 服务器和客户端的通信 TCP
- 基于TCP协议实现服务器和客户端的通信程序
- TCP/UDP客户端服务器实现通信
- Linux下的C语言编程——简单实现tcp客户端和服务器
- linux下用多线程实现socket服务器和客户端的异步通信
- TCP传输,客户端和服务器通信
- TCP传输,客户端和服务器通信
- linux下C实现客户端服务器通信框架
- 基于linux poll模型的tcp服务器------一个服务器如何与多个客户端进行通信?
- Linux下TCP客户端和服务器代码编写
- Linux环境下服务器和客户端的网络通信
- linux 下socket 服务器和客户端异步通信
- Linux套接字实现服务器和客户端通信
- python socket 创建tcp服务器和客户端
- 使用两个栈实现一个队列
- ubuntu 下安装jdk
- Python013列表生成
- 【Vuforia】Vuforia实现自动对焦的代码
- 简单排序——直接插入排序
- LINUX下如何创建TCP客户端和服务器,实现通信
- const修饰变量的总结
- windows下编译openssl
- Redux简介
- C++学习笔记——继承与派生
- [RK3288][Android6.0] 调试笔记 --- Camera Preview原始数据帧dump
- printf/fprintf/sprintf/snprintf输出函数
- mybatis foreach 属性及其三种使用情况
- 前端之移动端