Delphi socket() 函数的应用
1、参数domain指明通信域,如PF_UNIX(unix域),PF_INET(IPv4),
PF_INET6(IPv6)等
2、type指明通信类型,最常用的如SOCK_STREAM(面向连接可靠方式,
比如TCP)、SOCK_DGRAM(非面向连接的非可靠方式,比如UDP)等。
3、参数protocol指定需要使用的协议。虽然可以对同一个协议
家族(protocol family)(或者说通信域(domain))指定不同的协议
参数,但是通常只有一个。对于TCP参数可指定为IPPROTO_TCP,对于
UDP可以用IPPROTO_UDP。你不必显式制定这个参数,使用0则根据前
两个参数使用默认的协议。
sa.sin_port:=htons(lisport);
sa.sin_addr.S_addr:=INADDR_ANY;//---------dcc-----htonl(INADDR_ANY); //INADDR_ANY,表示本地计算机的默认IP地址
salen:=sizeof(sa);
//******************************************************************************
{ sin_family指代协议族,在socket编程中只能是AF_INET ,PF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
s_addr按照网络字节顺序存储IP地址
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
}
[参数]
s - 指向用Socket函数生成的Socket Descrīptor
addr - 指向Socket地址的指针
namelen - 该地址的长度.
[返回值]
当函数成功调用时返回0
调用失败时返回 SOCKET_ERROR
if bind(lissocket,sa,sizeof(sa))=SOCKET_ERROR then
closesocket(lissocket);
DebugMessage('无法打开端口:'+inttostr(lisport));
exit;
end;
{socket 套接字,网络编程必用的
listen ()监听从服务器传来的接收数据
listen ()创建一个套接口并监听申请的连接.}
//*******************************************
DebugMessage('连接成功!');
if acceptsocket=INVALID_SOCKET then
begin
DebugMessage('接受Socket失败!');
continue;
end;
Classes,messages,windows,winsock,stdctrls,Sysutils;
type
//线程的声明
TListenThread = class(TThread)
private
{ Private declarations }
lissocket:Tsocket;
lisport:integer;
str:string;
procedure AddMes;
procedure DebugMessage(mes:string);
protected
procedure Execute; override; //线程执行过程
public
constructor CreateIt(port:integer); //创建线程端口
destructor destroy;override; //结束线程
end;
uses main,UnitSocketRead,DataUnit ;
constructor TlistenThread.CreateIt(port:integer); //创建端口
begin
inherited create(true);
lisport:=port;
FreeOnTerminate:=true;
resume; //******唤醒线程 重(新)开(始),再继续;恢复;收回;【微软】继续执行 挂起的线程重新执行。
begin
if lissocket<>INVALID_SOCKET then
begin
//shutdown(lissocket,SD_BOTH);//中断连接,其实连接还存在。
closesocket(lissocket); //*********CloseSocket() 是用来关闭一个 Socket 的!
DebugMessage('Close Socket');
end;
inherited destroy;
end;
var acceptsocket:Tsocket;
sa:SOCKADDR_IN;
salen:integer;
tempthreadread:ThreadSocketRead;
begin
{ Place thread code here }
Lissocket:=socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
{socket()系统调用,带有三个参数:
1、参数domain指明通信域,如PF_UNIX(unix域),PF_INET(IPv4),
PF_INET6(IPv6)等
2、type指明通信类型,最常用的如SOCK_STREAM(面向连接可靠方式,
比如TCP)、SOCK_DGRAM(非面向连接的非可靠方式,比如UDP)等。
3、参数protocol指定需要使用的协议。虽然可以对同一个协议
家族(protocol family)(或者说通信域(domain))指定不同的协议
参数,但是通常只有一个。对于TCP参数可指定为IPPROTO_TCP,对于
UDP可以用IPPROTO_UDP。你不必显式制定这个参数,使用0则根据前
两个参数使用默认的协议。}
//******************************************************************************
begin
DebugMessage('Create Socket Error');
exit;
end;
sa.sin_port:=htons(lisport);
sa.sin_addr.S_addr:=INADDR_ANY;//---------dcc-----htonl(INADDR_ANY); //INADDR_ANY,表示本地计算机的默认IP地址
salen:=sizeof(sa);
//******************************************************************************
{ sin_family指代协议族,在socket编程中只能是AF_INET ,PF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
s_addr按照网络字节顺序存储IP地址
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
}
[参数]
s - 指向用Socket函数生成的Socket Descrīptor
addr - 指向Socket地址的指针
namelen - 该地址的长度.
[返回值]
当函数成功调用时返回0
调用失败时返回 SOCKET_ERROR
if bind(lissocket,sa,sizeof(sa))=SOCKET_ERROR then
begin
closesocket(lissocket);
DebugMessage('无法打开端口:'+inttostr(lisport));
exit;
end;
{socket 套接字,网络编程必用的
listen ()监听从服务器传来的接收数据
listen ()创建一个套接口并监听申请的连接.}
//*******************************************
begin
acceptsocket:=accept(lissocket,@sa,@salen); //AcceptSocket 是一个阻塞方法,它返回可用来发送和接收数据的 Socket。
DebugMessage('连接成功!');
if acceptsocket=INVALID_SOCKET then
begin
DebugMessage('接受Socket失败!');
continue;
end;
tempthreadread:=ThreadSocketRead.CreateIt(acceptsocket,Datamodule1.ADOConnection1.ConnectionString);
if tempthreadread<>nil then
begin
str:='New thread:'+IntToStr(tempthreadread.threadid);
synchronize(AddMes); //synchronize 时间同步 调用方法本模块的 AddMes方法
end
else
begin
closesocket(acceptsocket);
DebugMessage('创建执行线程失败!'); //调用本单元的 DebugMessage方法
end;
closesocket(lissocket); //一个关闭套接口的方法
end;
begin
if not terminated then //terminated 终结
FormMain.Memo.Lines.Add(FormatDatetime('hh:mm:ss',Now)+'-*-'+Str);
end;
begin
if gdebug then
begin
Str:=mes;
synchronize(AddMes); //synchronize 时间同步 调用方法本模块的 AddMes方法
end;
end;
//
Delphi socket() 函数的应用的更多相关文章
- 使用socket()函数创建套接字
在Linux中,一切都是文件,除了文本文件.源文件.二进制文件等,一个硬件设备也可以被映射为一个虚拟的文件,称为设备文件.例如,stdin 称为标准输入文件,它对应的硬件设备一般是键盘,stdout ...
- PHP Socket实现websocket(二)Socket函数
PHP socket函数是调用系统的的Socket函数,可以参考C语言的socket函数. Socket函数:http://php.net/manual/en/book.sockets.php 服务器 ...
- delphi公共函数 UMyPubFuncFroc--版权所有 (C) 2008 勇者工作室
{*******************************************************} { } { Delphi公用函数单元 } { } { 版权所有 (C) 2008 勇 ...
- Windows套接字Socket函数
1.使用套接字函数之前,先要加载套接字函数库: #include "Winsock2.h" #pragma comment(lib,"Ws2_32.lib") ...
- (转载)delphi 常用函数(数学)
delphi 常用函数(数学) Delphi中怎么将实数取整? floor 和 ceil 是 math unit 里的函数,使用前要先 Uses Math.trunc 和 round 是 system ...
- socket函数
为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,famil ...
- Delphi回调函数及其使用
Delphi回调函数及其使用 1 回调函数的概述 回调函数是这样一种机制:调用者在初始化一个对象(这里的对象是泛指,包括OOP中的对象.全局函数等)时,将一些参数传递给对象,同时将一个调用者可以访问的 ...
- Delphi过程函数传递参数的八种方式
今天一同事问我为什么有些过程函数里面有Var而有些没有,不解,遂到网上百度,得解.快哉,快哉. 在Delphi过程.函数中传递参数几个修饰符为Const.Var.Out.另一种不加修饰符的为默认按值传 ...
- delphi字符串函数大全
转帖:delphi字符串函数大全 2009-11-17 16:43:55 分类: delphi字符串函数大全 ━━━━━━━━━━━━━━━━━━━━━首部 function StringToGUID ...
随机推荐
- 【转】Web前端开发规范文档
规范目的: 使开发流程更加规范化. 通用规范: TAB键用两个空格代替(WINDOWS下TAB键占四个空格,LINUX下TAB键占八个空格). CSS样式属性或者JAVASCRIPT代码后加“;”方便 ...
- css3之@font-face---再也不用被迫使用web安全字体了
1,@font-face 的出现在没有css3之前,我们给网页设计字体只能设置web安全字体,使得我们的网页表现看上去好像都是那个样子,那么如果我们想给字体设置web设计者提供的字体呢?没有问题,cs ...
- 曾经感动过我们的文字 今天是否还有印象?——v1
①人最宝贵的东西是生命.生命对人来说只有一次.因此,人的一生应当这样度过:当一个人回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧;这样,在他临死的时候,能够说,我把整个生命和全部精力都献给了人生 ...
- [C# 基础知识系列]专题十六:Linq介绍
转自http://www.cnblogs.com/zhili/archive/2012/12/24/Linq.html 本专题概要: Linq是什么 使用Linq的好处在哪里 Linq的实际操作例子— ...
- [Excel] CsvHelper---C#关于CSV文件的导入和导出以及转化 (转载)
点击下载 CsvHelper.rar 这个类是关于Csv文件的一些高级操作1.DataTable导出到CSV2.将Csv读入DataTable看下面代码吧 /// <summary> // ...
- Android学习之旅:五子棋
在学完了Android的基础之后,我开始尝试着写一些小项目练练手,同时进一步巩固自己的基础知识,而我选的的第一个项目就是做一个简单的人人对战的五子棋小游戏. 首先,我们要新建一个自定义控件类Panel ...
- python基础知识十一
图形软件 使用Python的GUI库——你需要使用这些库来用Python语言创建你自己的图形程序.使用GUI库和它们的Python绑定,你可以创建你自己的IrfanView.Kuickshow软件或者 ...
- 什么是WordPress?
(今天由于好友 肖知虎的 的需求 , 我开始了帮助小虎建站的需求, 就这样开始学习了Wordpress. 这些文章就是为了记录这些我在学习过程当中的心得,和记录下来的文字而已) 什么是WordPre ...
- 4.SQL语言基础
4.1语言分类和用户模式 4.1.1语言分类 1)数据查询语言 用语检索数据库中的数据,主要是select语句,是操作数据库时最为频繁使用. 2)数据操纵语言 用语改变数据库中的数据,主要包括inse ...
- 读书笔记之 - javascript 设计模式 - 门面模式
门面模式有俩个作用: 简化类的接口 消除类与使用它的客户代码之间的耦合 在javascript中,门面模式常常是开发人员最亲密的朋友.它是几乎所有javascript库的核心原则,门面模式可以使库提供 ...