Linux数据库.doc_第1页
Linux数据库.doc_第2页
Linux数据库.doc_第3页
Linux数据库.doc_第4页
Linux数据库.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

创建数据库:CREATE DATABASE db_name使用数据库:USE db_name删除数据库:DROP DATABASE db_name表的操作创建表:CREATE TABLE ( , .)例:CREATE TABLE student_info(stu_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,stu_name VARCHAR(30) NOT NULL,stu_sex CHAR(2) NOT NULL,stu_age INT NOT NULL,stu_address VARCHAR(100),PRIMARY KEY (stu_id);修改表:ALTER TABLE ADD 完整性约束DROP ALTER COLUMN ;例:ALTER TABLE student_info ADD stu_entrance DATE删除表:DROP TABLE table_name例:DROP TABLE students,courses,DROP TABLE IF EXISTS students(不能肯定表是否存在的情况)记录的操作向指定的数据表中插入新的数据行:INSERT INTO (,.)VALUES (,.)例:INSERT INTO student_info (stu_id, stu_name, stu_sex, stu_age) VALUES (9028,陈东,男,IS,18);更新记录或修改满足规定条件的现有记录:UPDATE SET =,=.WHERE ;例:UPDATE student_info SET stu_age=22 WHERE stu_id=9028删除记录:DELETE FROM WHERE ;例:DELETE FROM student_info WHERE stu_id=9028查询单表查询、连接查询、嵌套查询、集合查询:SELECT ALL|DISTINCT ,FROM ,WHERE GROUP BY HAVING ORDER BY ASC|DESC;例:(1)查询所有记录。SELECT * FROM student_info #在SELECT语句中使用“*”检索出所有字段信息。(2)查询指定字段信息。SELECT stu_id,stu_name FROM student_info(3)查询所有学生的学号和姓名,并按年龄排序。SELECT stu_id,stu_name FROM student_info ORDER BY stu_age(4)用WHERE子句指定条件查询所需信息。SELECT * FROM student_info WHERE stu_age20视图从用户方面来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表,即视图是由一张或多张表中的数据组成的。行和列数据来自于定义视图的查询所引用的表,并且在引用视图时动态生成。创建视图:CREATE OR REPLACE ALGORITHM(算法,运算法则)= UNDEFINED|MERGE|TEMPTABLE VIEW view_name (column_list) AS select_statement WITH CASCADED|LOCAL CHECK OPTION 若在给定数据库中创建视图,创建时,应将名称指定为db_name.view_name。例:CREATE VIEW test.v AS SELECT * FROM t(表名);修改视图:ALTER OR REPLACE ALGORITHM(算法,运算法则)= UNDEFINED|MERGE|TEMPTABLE VIEW view_name (column_list) AS select_statement WITH CASCADED|LOCAL CHECK OPTION删除视图:DROP VIEW IF EXISTS view_name ,view_name RESTRICT|CASCADE例:假设有一个产品表(product)和一个购买记录表(purchase)create table product(product_id int not null,name varchar(50) not null,price double not null);insert into product values(1,apple,5.5);create table purchase(id int not null,product_id int not null,qty int not null default 0,gen_time datetime not null);insert into purchase values(1,1,10,now();创建视图purchase_detail,用于查询购买的详细信息:CREATE VIEW purchase_detail as select as name,product.price as price,purchase.qty as qty,product.price *purchase.qty as total_value from product,purchase where duct_id=duct_id;触发器操作创建触发器:CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmttrigger_name是所创建的触发器的名称,与tbl_name的表相关。这里的tbl_name必须引用永久性表,并且不能将触发器与TEMPORARY表或视图关联起来。trigger_time是触发器的动作时间,它可以是BEFORE或AFTER,以指明触发程序实在激活它的语句之前或之后触发。trigger_event指明了激活触发程序的语句的类型。可以是:INSERT(新行插入表时,如INSERT、LOAD DATA和REPLACE)、UPDATE、DELETE。trigger_stmt是当触发程序激活时执行的语句。如果打算执行多个语句,可以使用GEGINEND复合语句结构。例:CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0); CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2=NEW.a1; DELETE FROM test3 WHERE a3=NEW.a1; UPDATE test4 SET b4 = b4+1 WHERE a4=NEW.a1; END删除触发器:DROP TRIGGER schema_name trigger_name存储过程操作存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。创建存储过程:CREATE PROCEDURE sp_name (proc_paramater, .)characteristic .routine_body由括号包围的参数列必须总是存在。如果没有参数,也应该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词OUT或INOUT。IN为默认类型,值必须在调用时指定,之不能返回(值传递);OUT值可以返回(指针传递);INOUT必须在调用时指定,只可以返回。存储程序包含多个语句:begin_label: BEGINstatement_list END end_label在存储过程中变量使用DECLARE来声明(DEFAULT赋默认值,SET赋值):DECLARE var_name, . type DEFAULT value。一般DECLARE用来声明局部变量。SET一般用于声明子程序内的变量或者全局服务器变量。例:CREATE PROCEDURE simpleproc (OUT pareml INT) BEGIN SELECT COUNT (*) INTO paraml FROM t; END创建函数:CREATE FUNCTIO sp_name (function_parameter,.)RETURNS type #必须包含characteristic .routine_body存储过程的使用例:CREATE PROCEDURE ordertotal(IN onumber INT,OUT ototal DECIMAL(8,2) ) #有效8位,保留两位BEGIN SELECT Sum(item_price*quantity) FROM orderitemsWHERE order_num=onumber INTO orotal;END;IN表名此值是用于从存储过程里输入的,OUT表名此值用于从存储过程里输出的。调用存储过程:CALL sp_name(parameter, .)例:CALL ordertotal(10,total);SELECT total;例:CREATE PROCEDURE dowhile()BEGINDECLARE v1 INT DEFAULT 5;WHILE v1 0 DO.SET v1 = v1-1;END WHILE;END索引创建索引:CREATE UNIQUE|FULLTEXT|SPATIAL INDEX index_nameUSING index_typeON tbl_name (index_col_name,.)例:CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL,INDEX indexName (username(length) #普通索引或UNIQUE indexName (username(length) #唯一索引或PRIMARY KEY(ID) #主键索引);使用索引:例:表article存放有关文章的数据,有3个字段,article_category、article_id、article_content。create index idx_u on article (article_category,article_id)查询:SELECT * FROM article WHERE article_category=11 ORDER BY article_id DESC LIMIT 5;事务与锁事务语法:START TRANSACTION |GEGIN WORKCOMMIT WORK AND NO CHAIN NO RELEASEROLLBACK WORK AND NO CHAIN NO RELEASESET AUTOCOMMIT=0|1SET GLOBAL | SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ|SERIALIZSBLESTART TRANSACTION 或GEGIN语句可以开始一项新的事务。COMMIT可以提交当前事务,是变更成为永久变更。ROLLBACK可以回滚当前事务,取消其变更。SET AUTOCOMMIT可以禁止或启用默认的AUTOCOMMIT模式,用于当前连接。AND CHAIN子句会在当前事务结束时,立刻启动一个新事务,并且新事务与刚结束的事务有相同的隔离等级。RELEASE子句在终止了当前事务后,会让服务器断开与当前客户端的连接。SET TRANSACTION用于为紧邻的下一个事务设置隔离等级。锁表使用语法:LOCK TABLEStb1_name AS alias READ LOCAL | LOW_PRITORITY WRITE ,tb1_name AS alias READ LOCAL | LOW_PRITORITY WRITE.通常单个的SQL语句(比如UPDATE)的执行都是原子性的,没有其他的线程可以干扰任何其他当前正在执行的SQL语句,因此不需要锁定表。一般读写操作同时进行时需要使用表锁,例如SELECT和INSERT语句并发的执行。例:LOCK TABLES trans(表名) READ,customer WRITE;SELECT SUM(value) FROM trans WHERE customer_id=some_id;UPDATE customerSET total_value=sum_from_previous_statement WHERE customer_id=some_id;UNLOCK TABLES;数据类型数值类型类型字节大小范围(有符号)范围(无符号)说明TINYINT1-1281270255小整数值SMALLINT2-3276832767065535大整数值MEDIUMINT3-83886088388607016777215大整数值INT或INTEGER4-2147483648214748364704294967295大整数值BIGINT8极大整数值FLOAT4单精度,浮点DOUBLE8双精度,浮点DECIMAL依赖于M、D依赖于M、D小数值字符串数据类型类型大小用途CHAR0255字节定长字符串VARCHAR0255字节可变长字符串TINYBLOB0255字节不超过255个字符的二进制字符串TINYTEXT0255字节短文本字符串BLOB065535字节二进制形式的长文本数据TEXT065535字节长文本数据类型大小用途MEDIUMBLOB016777215字节二进制形式的中等长度文本数据MEDIUMTEXT016777215字节中等长度文本数据LONGBLOB04294967295字节二进制形式的极大文本数据LONGTEXT04294967295字节极大文本数据ENUM最多支持65535个成员枚举,列可赋予某个枚举成员SET0255字节集合;列可赋予多个集合成员 日期时间类型类型大小范围格式说明DATE3字节1000-01-01/9999-12-31YYYY-MM-DD日期值TIME3字节-838:59:59/838:59:59HH:MM:SS时间值或持续时间YEAR1字节1901/2155YYYY年份值DATETIME8字节1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DDHH:MM:SS混合日期和时间值TIMESTAMP8字节1970-01-01 00:00:00/2037年某时YYYYMMDDHHMMSS混合日期和时间值时间戳没有冒号分隔符的TIME类型值,将会被理解为持续的时间,而不是时间戳。运算符比较运算符:比较的结果有三种可能:1或TRUE;0或FALSE;NULL。区间的比较:expr (NOT)BETWEEN min AND max;区间 expr (NOT)IN (value1,value2,.);集合字符串比较:(1)expr like XXX,XXX为模式串。编号字符含义1%匹配任意个字符,包括零字符2_严格的匹配一个字符3%匹配字符%4_匹配字符_例:select 1232 like 12_,结果为0; select 12_%32 like 12_%,结果为1。数据库连接应用程序对数据库操作的一般步骤:(1) 建立连接。(2) 执行SQL操作语句。(3) 关闭连接。C语言API(应用程序编程接口)1.MYSQL MYSQL结构代表一个数据库链接的句柄,包含有关服务器的连接状态的信息,几乎所有的函数均使用到它。要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接。2.MYSQL_RES MYSQL_RES结构代表返回行的查询结果(SELECT、SHOW、DESCRIBE)。3.MYSQL_ROW 这是一个行数据的类型安全的表示。行通过调用mysql_fetch_row()获得。4.MYSQL_FIELD MYSQL_FIELD结构包含字段信息,例如字段名、类型、大小。使用MYSQL_FIELD结构表示关于该结果集中列的元数据每列一个结构。5.my_ulonglong 长整型,用于函数的返回值。执行预处理语句的步骤如下: (1)用mysql_stmt_init()创建预处理语句句柄。要想在服务器上准备预处理语句,可调用mysql_stmt_prepare(),并为其传递包含SQL语句的字符串。(2)如果语句生成了结果集,调用mysql_stmt_result_metadata()以获得结果集元数据。(3)使用mysql_stmt_bind_param()设置任何参数的值。必须设置所有参数。(4)调用mysql_stmt_execute()执行语句。(5)如果语句生成了结果集,捆绑数据缓冲,通过调用mysql_stmt_bind_result()来检索行值。(6)通过重复调用mysql_stmt_fetch(),按行将数据提取到缓冲区,直至未发现更多行为止。(7)通过更改参数值并再次执行语句,重复步骤3到6。与MySQL交互时,应用程序应遵循以下原则: (1)调用mysql_library_init()初始化MySQL库。(2)调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器。(3)发出SQL语句并处理其结果。(4)调用mysql_close()关闭与MySQL服务器的连接。(5)调用mysql_library_end(),结束MySQL库的使用。例:#include #头文件MYSQL *connection; #连接数据库的变量mysql_init(MYSQL *connection); #初始化这个变量MYSQL * mysql_init(MYSQL *connection);#初始化连接句柄初始化成功后,就可以建立实际的连接了:MYSQL * mysql_real_connect(MYSQL *connection, #connection必须是已经初始化的连接句柄结构const char *server_host, #server_host可以是主机名,可以是IP地址,如果仅仅连接到本机,可以使用localhost。const char *sql_user_name, #用户名const char *sql_password, #密码const char *db_name, #数据库名unsigned int port_number, #为0const char *unix_socket_name, #为NULLunsigned int client_flag); #通常为0例:建立一个本地数据库的连接:connection=mysql_real_connect(connection,”localhost”,”user”,”password”,”db_test”,0,NULL,0); 数据库操作:向服务器发出SQL命令。mysql_query()预期的SQL语句为指定的、由Null终结的字符串,而mysql_real_query()预期的是计数字符串。如果字符串包含二进制数据,必须使用第二个。函数声明:int mysql_query(MYSQL * connection,const char *query); #const限定一个变量不能被改变int mysql_real_query(MYSQL *connection,const char *query, unsigned long length);查询成功,均返回0。处理结果集:(1)调用mysql_store_result,一次性的检索整个结果集。(2)针对应用程序,调用mysql_use_result(),对“按行”结果集检索进行初始化处理。均能通过调用mysql_fetch_row()访问行。与数据处理相关的常用函数声明如下:my_ulonglong mysql_affected_rows(MYSQL *mysql);my_ulonglong mysql_num_rows(MYSQL_RES *res);unsigned int mysql_num_fields(MYSQL_RES *result);MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);MYSQL_RES *mysql_store_result(MYSQL *mysql);void mysql_free_result(MYSQL_RES *result);例:查询数据库db_test中的一个表table_test的C代码可以这样写:int t,r;MYSQL *mysql;MYSQL_RES *res;MYSQL_ROW row;char *query=”select *from table_test”;. .t=mysql_real_query(mysql,query,(unsigned int) strlen (query);if(t)printf(“Error making query :%sn”,mysql_error(mysql);elseres=mysql_use_result(mysql);for(r=0;r=mysql_field_count(mysql);r+)row=mysql_fetch_row(res);if(row0) break;for(t=0;tmysql_num_fields(res);t+)printf(“%s”,rowt);printf(“n”);C API的可用函数函数描述mysql_affected_rows()返回上次UPDATE、DELETE、INSERT的行数mysql_autocommit()切换autocommit模式mysql_change_user()更改打开连接上的用户和数据库mysql_charset_name()返回用于连接的默认字符集的名称mysql_close()关闭服务器连接mysql_commit()提交事务函数描述mysql_connect()连接到MySQL服务器。已使用mysql_real_connect()取代mysql_create_db()创建数据库。已使用CREATE DATABASE取代mysql_data_seek()在查询结果集中查找属性行编号mysql_debug()用给定的字符串执行DBUG_PUSHmysql_drop_db()撤销数据库。已使用DROP DATABASE取代mysql_dump_debug_info()让服务器将调试信息写入日志mysql_eof()确定是否读取了结果集的最后一行。已使用mysql_errno()或mysql_error()取代mysql_errno()返回上次调用的MySQL函数的错误编号mysql_error()返回上次调用的MySQL函数的错误信息mysql_escape_string()对特殊字符进行转义处理mysql_fetch_field()返回下一个表字段的类型mysql_fetch_field_direct()给定字段编号,返回表字段的类型mysql_fetch_fields()返回所有字段结构的数组mysql_fetch_lengths()返回当前行中所有列的长度mysql_fetch_row()从结果集中获取下一行mysql_field_seek()将列光标置于指定的列mysql_field_count()返回上次执行语句的结果列的数目mysql_field_tell()返回上次mysql_fetch_field()所使用字段光标的位置mysql_free_result()释放结果集使用的内存mysql_get_client_info()以字符串形式返回客户端版本信息函数描述mysql_get_client_version()以整数形式返回客户端版本信息mysql_get_host_info()返回描述连接的字符串mysql_get_server_version()以整数形式返回服务器的版本号mysql_get_proto_info()返回连接所使用的协议版本mysql_get_server_info()返回服务器的版本号mysql_info()返回关于最近所执行查询的信息mysql_init()获取或初始化MYSQL结构mysql_insert_id()返回上一个查询为AUTO_INCREMENT列生成的IDmysql_kill()杀死给定的线程mysql_library_end()最终确定MySQL C API库mysql_library_init()初始化MySQL C API库mysql_list_dbs()返回与简单正则表达式匹配的数据库名称mysql_list_fields()返回与简单正则表达式匹配的字段名称mysql_list_processes()返回当前服务器线程的列表mysql_list_tables()返回与简单正则表达式匹配的表名mysql_more_results()检查是否还存在其他结果mysql_next_result()在多语句执行过程中返回/初始化下一个结果mysql_num_fields()返回结果集中的列数mysql_num_rows()返回结果集中的行数mysql_options()为mysql_connect()设置连接选项mysql_ping()检查与服务器的连接是否工作函数描述mysql_query()执行指定为“以Null终结的字符串”的SQL查询mysql_real_connect()连接到MySQL服务器mysql_real_escape_string()对字符串中的特殊字符进行转义处理mysql_real_query()执行指定为计数字符串的SQL查询mysql_refresh()刷新或复位表和高速缓冲mysql_reload()通知服务器再次加载授权表mysql_rollback()回滚事务mysql_row_seek()使用从mysql_row_tell()返回的值,查找结果集中的行偏移mysql_row_tell()返回行光标位置mysql_select_db()选择数据库mysql_server_end()最终确定嵌入式服务器库mysql_server_init()初始化嵌入式服务器库mysql_set_server_option()为连接设置选项mysql_sqlstate()返回关于上一个错误的SQLSTATE错误代码mysql_shutdown()关闭数据库服务器mysql_stat()以字符串形式返回服务器状态mysql_store_result()检索完整的结果集至客户端mysql_thread_id()返回当前线程IDmysql_thread_safe()如果客户端已编译为线程安全的,返回1mysql_ use_result()初始化逐行的结果集检索mysql_warning_count()返回上一个SQL语句的警告数应用实例:假设在本机中存在一个名为db_test的数据库,用户名为root,密码123456,在里面有一个username表,定义如下:CREATE TABLE username(ID INT NOT NULL PRIMARY KEY, username varchar(32) NOT NULL);源代码如下:#include #includevoid main()MYSQL *mysql;MYSQL_RES *res;MYSQL_ROW row;char *query=”select * from username”;int t,r;mysql_init(mysql);if(!mysql_real_connect(mysql,”localhost”,”root”,”123456”,”test”,0,NULL,0)printf(“Error connecting to database : %sn”, mysql_error(mysql);else printf(“connected.n”);t=mysql_query(mysql,query);if(t)printf(“error making query:%sn”,mysql_error(mysql);elseprintf(“query made.n”);res=mysql_use_result(mysql);if(res)for(r=0;r=mysql_field_count(mysql);r+)row=mysql_fetch_row(res);if(row0) break;for(t=0;tmysql_num_fields(res);t+)printf(“%s”,rowt);printf(“n”);mysql_free_result(res);mysql_close(mysql);套接字(Socket)创建套接字:SOCKET PASCAL FAR socket(int af, int type, int prorocol) 失败返回-1,成功返回新分配的套接字号。参数说明:af:用于指定通信所采用的协议,一般采用AF_INET。type:用于描述要建立的套接字的类型,可选的三个参数为:SOCK_STREAM、SOCK_DGREAM、SOCK_RAW。其中SOCK_STREAM是指TCP通信,TCP面向连接,因此发送的是字节流,无长度限制,并且数据的传输是可靠的、无差错的,同事内置了流量控制机制,从协议上保证了数据的稳定性。SOCK_DGREAM是指UDP通信,UDP是无连接,因此发送的是数据包,由于UDP协议本身是不可靠的,有可能存在丢包、抖动、延时等现象。SOCK_RAW是原始套接字,是作用在网络层,支持对IP包进行操作,主要进行新协议的验证。protocol:用于指定套接字所采用的特定协议,如果不希望指定任何协议,置为0,使用默认连接。例:SOCKET serverSocket = socket (AF_INET, SOCK_STREAM, 0);if(serverSocket0)printf(“create socket error!”);return -1;bind函数:在Socket中,绑定(bind)是将地址信息(包括IP与端口)与此前创建成功的套接字关联在一起,因为只有通过这种关联,当客户端的请求信息到来时,服务器操作系统才能根据请求信息中的地址信息找到相关联的服务程序,并向其提交客户请求,所以这是 创建服务程序必不可少的一步。int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR *name,int namelen);成功返回0,否则返回SOCKET_ERROR。参数说明:s:用于指定要关联的套接字。name:是一个地址信息结构体,用于指定要绑定的IP地址与端口信息。namelen:指示name的长度,一般采用sizeof(sockaddr)来填充。例:使用如下方式将服务套接字与一个地址信息进行绑定。struct sockaddr_in serverAddr;bzero(&serverAddr,sizeof(serverAddr);# &serverAddr要置零的数据地址, sizeof(serverAddr)要置零的数据字节个数。serverAddr.sin_family = AF_INET; #协议serverAddr.sin_port = htons(5050); #端口serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); #IPif(bind(serverSocket,(struct sockaddr*)&serverAddr, sizeof(serverAddr)0)perror(“bind error”);return -1;listen函数:listen函数的作用是侦听,是指服务套接字在指定端口侦听,以被动的方式等待客户端连接到来。Listen函数要与accept函数进行搭配使用,当侦听到新连接到来时,调用accept函数处理连接。int PASCAL FAR listen(SOCKET s,int backlog); #成功则返回0,否则返回SOCKET_ERROR。参数说明:s:用于指定要关联的服务套接字。backlog:用于指定请求连接队列的最大长度,一般为5。例:if (listen(serverSocket,5)0)perror(“listen error .”);return -1;accept函数:完成服务器端与客户端通信连接的最终建立。SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR *addr,int FAR *addrlen); #若函数调用成功,则返回客户端套接字,否则返回INVALID_SOCKET。参数说明:s:用于指定当前的服务器套接字。addr:用于保存当前客户端的地址信息。addrlen:客户端地址的长度。例:while(true)sockaddr client;SOCKET client = accept(ServerSocket, (sockaddr *)&client,sizeof(client);if(client=INVALID_SOCKET)perror(“accept is error”);break;connect函数:accept函数作用在服务器端,而connect函数是放在客户端应用程序中使用。作用是帮助客户端向指定地址的服务器发起一条TCP连接,若连接成功,则链路套接字建立成功,否则返回错误类型代码。int PASCAL FAR connect (SOCKET s , const struct sockaddr FAR *name,int namelen);调用成功返回0;否则返回SOCKET_ERROR。参数说明:s:连接套接字。name:服务器端地址信息、协议信息。namelen:结构体的长度。例:sockaddr server;server.sin_family=AF_INET;server.sin_port=htons(5050);server.sin_addr.s_addr=inet_addr(“2”);if(connect(client,(sock_addr*)&server,sizeof(server) )= SOCKET_ERROR)perror(“无法连接到主机”);return;此段代码的作用是客户端向目标服务器发起连接,其中服务器端的IP地址为2、端口是5050、采用的协议是TCP。send函数:用在TCP程序中,目的是实现数据的发送。int PASCAL FAR send (SOCKET s,const char FAR *buf , int len , int flags);调用成功则返回发送的字节数,失败返回SOCKET_ERROR。参数说明:s:已连接的套接字。buf:待发送的数据缓冲区。len:标记有多少数据要发送。flags:设定发送控制参数,一般为0。例:char buffer20;strcpy (buffer,”Hello World”);if(send(client,buffer,sizeof(buffer),0)=SOCKET_ERROR)perror(“发送数据失败”);return;recv函数:应用于TCP程序,用于数据的接收。int PASCAL FAR recv (SOCKET s,char FAR *buf , int len , int flags);调用成功则返回发送的字节数,失败返回SOCKET_ERROR。参数说明:s:已连接的套接字。buf:用于指示接收缓冲区的指针,即存放被接收到的数据。len:指示接收数据的长度。flags:设定传输控制参数,一般为0。例:char buf1024;if(recv(client,buf,1024,0)=SOCKET_ERROR)pe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论