| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1064 人关注过本帖
标题:setsockopt写法正确吗?
只看楼主 加入收藏
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
结帖率:2.78%
收藏
 问题点数:0 回复次数:22 
setsockopt写法正确吗?
DECLARE LONG  setsockopt IN "Ws2_32" long s ,long level,long optname ,long optval ,long optlen  &&"wsock32.dll"
DECLARE LONG  getsockopt IN "Ws2_32" long s ,long level,long optname ,long @optval ,long optlen&&"wsock32.dll"
#define  SOL_SOCKET  65535
#define SO_REUSEADDR 0x0004

setsockopt(Thisform.tcpClient.OBJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR, 1, 1)

C语言使用如下
*!*        int on = 1;
*!*        setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));



为了解决Address in use C:\Windows\SysWOW64\mswinsck.ocx

[此贴子已经被作者于2023-8-28 09:32编辑过]

搜索更多相关主题的帖子: LONG define dll Address Windows 
2023-08-27 14:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
原型
int setsockopt(
  [in] SOCKET     s,
  [in] int        level,
  [in] int        optname,
  [in] const char *optval,
  [in] int        optlen
);
注意optval是char*类型
2023-08-28 22:02
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-8-28 22:02:34的发言:

原型
int setsockopt(
   SOCKET     s,
   int        level,
   int        optname,
   const char *optval,
   int        optlen
);
注意optval是char*类型



char*类型 在VFP中怎么写?
2023-08-29 08:23
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
//C++代码 dll.h
#ifndef LIB_H
#define LIB_H
extern "C" _declspec(dllexport) char* enciphering(char *ch,int &key);
extern "C" _declspec(dllexport) char* deciphering(char *ch,int &key);
#endif

 
//C++代码 Sercret.cpp
#include <iostream>
#include "dll.h"
using namespace std;
char* enciphering(char *ch,int &key)
{
    char *str=new char[100];
    int i=0,x;
    bool decide=true;
    while(ch[i])
    {
        if(ch[i]>='a'&&ch[i]<='z')
        {
            x = ch[i] + i + key + 1;
            while(decide)
            {
                if(x>'z')
                    x-=26;
                else
                    decide=false;
            }
            decide=true;
            str[i]=x;
        }
        else
            str[i]=ch[i];
        i++;
    }
    return str;
}
char* deciphering(char *ch,int &key)
{
    char *str=new char[100];
    int i=0,x;
    bool decide=true;
    while(ch[i])
    {
        if(ch[i]>='a'&&ch[i]<='z')
        {
            x=ch[i]-i-1-key;
            while(decide)
            {
                if(x<'a')
                    x+=26;
                else
                    decide=false;
            }
            decide=true;
            str[i]=x;
        }
        else
str[i]=ch[i];
        i++;
    }
    return str;
}

 

//编译后dll被VFP调用
Declare String enciphering in s_sercret.dll String @, Integer @
Declare String deciphering in s_sercret.dll String @, Integer @
2023-08-29 13:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用ljb8864在2023-8-29 08:23:20的发言:

char*类型 在VFP中怎么写?

通常char*类型可看作vfp的字符串类型,如果涉及到unicode可能要在尾部添加0h00(chr(0))。
函数声明时通常是string@,如果只作为输入参数(in)可不用描写“@”。
提供的示例:
C语言使用如下
*!*        int on = 1;
*!*        setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
代码不清楚出处,有些编译器对这种语句描述可能会有警告提示(因强制类型转换不太严谨)。
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on));
vfp可用BINTOC(on,"4rs")来表达
2023-08-31 08:13
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
回复 5楼 吹水佬
DECLARE LONG  setsockopt IN "Ws2_32" long s ,long level,long optname ,string optval ,long optlen  &&"wsock32.dll"
DECLARE LONG  getsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long optlen


optval= REPLICATE(0h00,4)
setsockopt( this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR, bintoc(1,"4rs")  , 1)
?getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4),optval


这样写?
2023-08-31 08:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
optlen都是4
2023-08-31 10:18
金戈铁马2
Rank: 2
等 级:论坛游民
帖 子:83
专家分:85
注 册:2017-1-8
收藏
得分:0 
学习
2023-08-31 10:32
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-8-31 10:18:08的发言:

optlen都是4



是不是UDP协议无效果?
optval= REPLICATE(0h00,4)
setsockopt( this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR, bintoc(1,"4rs")  , 4)
?getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4),optval

返回-1
2023-08-31 13:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 9楼 ljb8864
跟着用 WSAGetLastError() 看看
2023-08-31 21:11
快速回复:setsockopt写法正确吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026258 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved