| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 810 人关注过本帖
标题:setsockopt写法正确吗?
取消只看楼主 加入收藏
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
结帖率:2.78%
收藏
 问题点数:0 回复次数:11 
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
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
收藏
得分:0 
回复 10楼 吹水佬
#define  SOL_SOCKET  65535  && 1也没用
#define SO_REUSEADDR   0x0004
#define SO_SNDBUF       7
#define SO_RCVBUF       8

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

返回:
0
1376,0
-1
0
-1

[此贴子已经被作者于2023-9-1 15:01编辑过]

2023-09-01 10:42
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-9-1 21:28:42的发言:

if getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4) == -1
    ? WSAGetLastError()
endif



WSAGetLastError() 返回0
2023-09-02 11:31
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-9-2 17:08:28的发言:


可能不只是get.....的问题,往前找是不是也有异常的地方。




DECLARE LONG WSAGetLastError IN "Ws2_32"
DECLARE LONG  setsockopt IN "Ws2_32"  s long,level long,optname long ,optval long,optlen long
DECLARE LONG  getsockopt IN "Ws2_32" long s ,long level,long optname ,string @optval ,long optlen

#define SOL_SOCKET 1
#define SO_REUSEADDR 0x0004
 
#define SO_SNDBUF       7
#define SO_RCVBUF       8

Thisform.tcpServer.LocalPort = 1001
Thisform.tcpServer.Listen

optval= REPLICATE(0h00,4)


iok=getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, 4)
?iok,"ok"
if iok== -1
    MESSAGEBOX( WSAGetLastError() )
endif
2023-09-02 17:32
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
收藏
得分:0 
回复 16楼 吹水佬
optlen=4
optval= REPLICATE(0h00,4)
?setsockopt( this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR ,bintoc(1,"4rs")  , @optlen) &&
? this.obJECT.SocketHandle,WSAGetLastError()
?getsockopt(this.obJECT.SocketHandle, SOL_SOCKET, SO_REUSEADDR,@optval, @optlen),optval,WSAGetLastError()

这句子可以
-----------------

但下面的设置接收缓存不行,是不是UDP不能设置
optval= 0h00200000
optlen=LEN(optval)
?setsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen)
?getsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen),optval
2023-09-04 09:32
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-9-4 21:32:37的发言:

不清楚 DECLARE - DLL 具体情况
要注意的是:不同的参数类型 DECLARE - DLL 声明也不同




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&&"wsock32.dll"
DECLARE LONG WSAGetLastError IN "Ws2_32"

#define  SOL_SOCKET  65535

#define SO_SNDBUF       7
#define SO_RCVBUF       8

optval=  0h00200000
optlen= len(optval)
?setsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen)
?getsockopt(this.obJECT.SocketHandle,SOL_SOCKET,SO_RCVBUF,@optval,@optlen),optval
2023-09-05 14:14
快速回复:setsockopt写法正确吗?
数据加载中...
 
   



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

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