linux创建线程执行socket网络编程

一、socket网络编程

实现一个简单的socket连接,来尝试一下linux网络编程吧。

首先分为服务端和客户端两个部分:

1、server服务端流程:

(1)socket(),创建套接字,返回int类型,可以看作连接通道的id,linux下一切皆文件,所以此处就是文件描述符。

(2)bind(),给此文件描述符绑定一个本地地址。

(3)listen(),监听连接请求

(4)accept(),接收连接请求,建立连接

(5)read()/ write(),数据读取/传输,此处为服务器发送也就是write

(6)close(),断开连接

2、client客户端流程:

(1)socket(),创建套接字,同上

(2)connect(),请求连接

(3)read () / write () ,数据读取/传输,此处为客户端接收也就是read

(4)close(),断开连接

先来看看服务端整体代码吧:

#include <string.h>        //string
#include <unistd.h>        //read(),write(),close()
#include <arpa/inet.h>     //网络编程库,htonl(),htons()
#include <sys/socket.h>    //网络编程库,socket(),bind(),listen(),sockaddr_in等
#include <iostream>        //输入输出
#include <stdlib.h>        //exit(),atoi()
using namespace std;
 
int main(int argc, char* argv[])
{
	int serv_sock;         //服务器套接字描述符
	int clnt_sock;         //客户端套接字描述符,同上,以下类似的就不重复了
 
	struct sockaddr_in serv_addr;      //地址信息结构体
	struct sockaddr_in clnt_addr;
	socklen_t clnt_addr_size;          //accept()的第三个参数是socklen_t类型,表示长度
	string message = "Hello World!";
	if (argc != 2) {                   //如果命令行不是输入两个参数
		cout<<"Usage : "<<argv[0]<<" <port>"<<endl;
		exit(1);
	}
						//1.1. 调用socket()创建套接字
	serv_sock = socket(PF_INET, SOCK_STREAM, 0);    //文件描述符
	if (serv_sock == -1)
		cout << "socket() error" << endl;
						//地址初始化
	memset(&serv_addr, 0, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);    //host类型转成long int
	serv_addr.sin_port = htons(atoi(argv[1]));        
                        //host类型转成short int,atoi是字符串转成整型数
						//1.2. 调用bind()函数分配IP地址和端口号
	if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)
		cout << "bind() error" << endl;
						//1.3. 调用listen()函数将套接字转换为可接收连接状态
	if (listen(serv_sock, 5) == -1)
		cout << "listen() error" << endl;
	clnt_addr_size = sizeof(clnt_addr);
						//1.4. 调用accept()函数受理连接请求
	clnt_sock = accept(se
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值