在Win32中没有用于本机C/C++的"高级"HTTP库,或者我只是在错误的地方寻找?
"高级"是指一种API,它允许我使用与.NET框架"大致相同"的抽象级别在C++中执行HTTP Web请求/响应(但请注意,使用C++/CLI不是我的选择).
如何在不使用.NET的情况下在Win32中的C/C++中执行此类操作(具有大约相同数量的代码)?作为参考,我提供了一个代码示例来说明我是如何在C#中完成的.
byte[] fileBytes = null;
bool successfulDownload = false;
using (WebClient client = new WebClient())
{
WebProxy proxy = WebProxy.GetDefaultProxy();
client.Proxy = proxy;
tryAgain:
try
{
fileBytes = client.DownloadData(fileUrl);
successfulDownload = true;
}
catch (WebException wEx)
{
if (wEx.Response != null && wEx.Response is HttpWebResponse)
{
string username = null, password = null;
bool userCanceled = false;
HttpStatusCode statusCode = ((HttpWebResponse)wEx.Response).StatusCode;
switch (statusCode)
{
case HttpStatusCode.ProxyAuthenticationRequired:
// This is just a convenience function defined elsewhere
GetAuthenticationCredentials(fileUrl, true, …Run Code Online (Sandbox Code Playgroud) 我正在使用Clojure编写的MUD客户端.现在,我需要两个不同的线程.接收来自用户的输入并将其发送到MUD(通过简单的Socket),以及从MUD读取和显示输出的输入到用户的输入.
我应该只使用Java线程,还是我应该转向某些特定于Clojure的功能?
有git介绍与漂亮的 图表,以了解"git的历史只是一个DAG"的概念.我想知道为什么有(似乎)很少的视觉git浏览器建立在这个精确的模型上来表示历史.
除此之外,所有的视觉git浏览器(gitk,git-gui,GitX等)都将图形推到了一个狭窄的列,而不是文本信息.
是否有以DAG视图为主要特征的git repo浏览器?任何平台,任何语言,独立,GUI/CUI都无关紧要.
我不打算解决手头的具体问题.只是希望一个激进的工具可以帮助我达到git zen.
编辑:相关但在OP的视图中,有不同的问题:
我正在寻找的不仅仅是"生成git历史DAG的工具"; 像网络浏览器一样,这个假设的"面向DAG的git浏览器"应该能够查看,搜索,跳转和过滤历史图表.
我正在尝试为学习目的做一个小型安全HTTPS客户端,看看SSL的所有机制现在如何在更高层次上工作,所以我试图通过ssl.wrap_socket将一个简单的套接字转换为ssl.
我可能倒退了整个概念但是,这就是我正在做的事情:
s.connect((host, port))
if port == 443:
f = open('cacerts.txt', 'r')
calist = f.read()
f.close()
ca = ssl.get_server_certificate((host, port), ssl_version=ssl.PROTOCOL_SSLv3|ssl.PROTOCOL_TLSv1)
if not ca in calist:
f = open('cacerts.txt', 'a')
f.write(ca)
f.close()
s = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3|ssl.PROTOCOL_TLSv1, cert_reqs=ssl.CERT_REQUIRED, ca_certs="cacerts.txt")
s.do_handshake()
Run Code Online (Sandbox Code Playgroud)
当我调用do_handshake()时,我得到了这个:
Traceback (most recent call last):
File "SSL_test.py", line 84, in Requester
s = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3|ssl.PROTOCOL_TLSv1, cert_reqs=ssl.CERT_REQUIRED, ca_certs="cacerts.txt")
File "C:\Python26\lib\ssl.py", line 338, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs)
File "C:\Python26\lib\ssl.py", line 120, in __init__
self.do_handshake()
File "C:\Python26\lib\ssl.py", line 279, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [Errno …Run Code Online (Sandbox Code Playgroud) 我是webservices的新手,并尝试使用RestTemplate编写RESTFul webservice的客户端.我使用org.springframework.http.converter.xml.MarshallingHttpMessageConverter作为消息转换器,org.springframework.oxm.xstream.XStreamMarshaller作为marshaller.
有没有办法进一步调试这个或找出这个问题的根本原因?
我的消费者类看起来像这样 -
@SuppressWarnings("unchecked")
public List<Deal> getClientInformation() throws RestClientException {
return restTemplate.getForObject(webServiceURL, List.class);
Run Code Online (Sandbox Code Playgroud)
}
例外:
Exception in thread "main" org.springframework.web.client.ResourceAccessException: I/O error: Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:359)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:307)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:177)
at main.java.com.sample.consumer.DealConsumer.getClientInformation(Consumer.java:35)
at main.java.com.client.WebserviceConsumerTestClient.main(WebserviceConsumerTestClient.java:16)
Run Code Online (Sandbox Code Playgroud)
引起:java.net.ConnectException:连接被拒绝:连接org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:359)
我需要让客户端能够建立许多连接.我使用Netty 4.0.不幸的是,所有现有示例都没有显示如何创建大量连接.
public class TelnetClient {
private Bootstrap b;
public TelnetClient() {
b = new Bootstrap();
}
public void connect(String host, int port) throws Exception {
try {
b.group(new NioEventLoopGroup()).channel(NioSocketChannel.class).remoteAddress(host, port).handler(new TelnetClientInitializer());
Channel ch = b.connect().sync().channel();
ChannelFuture lastWriteFuture = null;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
for (;;) {
String line = in.readLine();
if (line == null) break;
lastWriteFuture = ch.write(line + "\r\n");
if (line.toLowerCase().equals("bye")) {
ch.closeFuture().sync();
break;
}
}
if (lastWriteFuture != null) lastWriteFuture.sync();
} finally {
b.shutdown();
} …Run Code Online (Sandbox Code Playgroud) 这实际上是我在这里发表的第一篇文章,我一直试图解决这个问题已经有一段时间了,但我终于打电话给国旗并尝试在这个主题上寻求帮助.
所以我有一个客户端和一个服务器,它是在echo客户端/服务器和安全聊天客户端/服务器之后建模的.我对聊天的SSL部分并不感兴趣,只是为了确保我收到客户端/服务器的响应.我将在本文的底部添加所有相关代码.我目前遇到的问题是,我可以在客户端连接时从服务器向客户端发送消息,但是在服务器向客户端发送初始消息时,我无法从客户端向服务器发送消息.从服务器发送的消息是:
Welcome to the server!
Run Code Online (Sandbox Code Playgroud)
来自客户端的消息是
test
Run Code Online (Sandbox Code Playgroud)
我应该知道我收到了来自客户端的消息,因为它应该回显
[You] test
Run Code Online (Sandbox Code Playgroud)
我知道服务器看到客户端,它给我状态更新但我不能出于某种原因向服务器发送消息.现在提出一个问题...有一次机会我正在使用StringDecoder和StringEncoder作为解码器和编码器...如果你正在制作一个游戏(这就是我正在做的),你会有类似的东西登录,玩家动作,世界更新等......发送Strings是最好的方法吗?我知道我看到很多字节流,在我的编程课中,我经历过触摸操作字节流,但我仍然不是很满意它们.如果字节流是更好/最好的方法,那么有人可以详细解释如何操作字节流以处理不同的项目.
如前所述,这是客户端中所有内容的开始:
public class Client {
public Client() {
// Initialize the window
GameWindow.init();
// Initialize the server connection
ClientHandler.init();
}
public static void main(String[] args) throws Exception {
// Set a default server address if one isn't specified in the arguments
if (args.length < 2 || args.length > 3) {
System.err.println("Usage: " + Client.class.getSimpleName() + " <host> <port> [<first message size>]");
System.err.println("Using default values."); …Run Code Online (Sandbox Code Playgroud) 我有一个围绕Azure Service Bus代码的基本包装器,我们将在一个辅助角色中使用它.这ServiceBusClient将每个工人的角色运行时进行实例化; 然后用来访问队列,直到没有剩余的项目进行枚举.
public class ServiceBusClient : IDisposable, IServiceBusClient
{
private const int DEFAULT_WAIT_TIME_IN_SECONDS = 120;
private const string SERVICE_BUS_CONNECTION_STRING_KEY = "service.bus.connection.string";
private readonly MessagingFactory _messagingFactory;
private readonly NamespaceManager _namespaceManager;
private readonly QueueClient _queueClient;
private readonly ISettingsManager _settingsManager;
public ServiceBusClient(ISettingsManager settingsManager, string queueName)
{
_settingsManager = settingsManager;
var connectionString = _settingsManager.GetSetting<string>(SERVICE_BUS_CONNECTION_STRING_KEY);
_namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
_messagingFactory = MessagingFactory.CreateFromConnectionString(connectionString);
_queueClient = GetOrCreateQueue(queueName);
}
public void Dispose()
{
_messagingFactory.Close();
}
public BrokeredMessage ReceiveTopMessage()
{
return _queueClient.Receive(TimeSpan.FromSeconds(DEFAULT_WAIT_TIME_IN_SECONDS));
}
public void SendMessage(object …Run Code Online (Sandbox Code Playgroud) 我开发了一个使用Azure AD进行身份验证的Native Client应用程序.我需要使用需要客户端ID和客户端密钥的AD Graph访问一些信息.我已将应用程序添加到我的Azure活动目录中.我添加了对Active Directory身份验证库(ADAL)的引用并安装了GraphAPI.身份验证上下文的AquireToken需要客户端ID(我有)和客户端密钥(密钥),我没有.我在Azure门户中查看了应用程序配置的所有位置,看起来本机应用程序没有设置密钥的选项.网络应用程序.有谁知道如何设置和获取本机应用程序的密钥?
我DefaultHttpClient在我当前的应用程序中使用.
我读过这篇文章,该文章指出DefaultHttpClient已弃用:http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
它指向这个网站:http://android-developers.blogspot.com/2011/09/androids-http-clients.html?m = 1,它太旧了,写于2011年.
我将放弃使用DefaultHttpClient并遵循这篇使用Apache的文章HttpClient:http://loopj.com/android-async-http/
我想知道这是在2015年针对Android API 19及更高版本的编程时采取的正确途径.