我使用c ++开发了客户端服务器程序,所以我希望收到超过500kb,我的客户端消息以"!"结束 ,所以我想收到,直到我的最后一个字节(!)收到,这是我的代码,它不起作用.它有什么问题.
do
{
int num = recv(*csock, buf, bytesLeft,0);
if (num == 0)
{
break;
}
else if (num < 0 && errno != EINTR)
{
fprintf(stderr, "Exit %d\n", __LINE__);
exit(1);
}
else if (num > 0)
{
numRd += num;
buf += num;
bytesLeft -= num;
fprintf(stderr, "read %d bytes - remaining = %d\n", num, bytesLeft);
}
}
while (bytesLeft != 0);
fprintf(stderr, "read total of %d bytes\n", numRd);
Run Code Online (Sandbox Code Playgroud) 我有一个问题,我绕道功能recv(ws2_32.dll)并尝试读取数据.我得到leng parametr - 17但在实际缓冲区中只有2个字节的长度.
我的代码:
int WINAPI OwnSend(SOCKET s, const char FAR *buff, int leng, int flags )
{
//why 'leng'==17 and (sizeof(char) * strlen(buff) + 1) == 2?
return pTrampolineSend(s, buff, leng, flags);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我不断收到调试错误"无法在C#中隐式转换类型'字符串'到'int'".
这是我的代码片段:
private void button2_Click(object sender, EventArgs e) //button to start takedown
{
byte[] packetData = System.Text.ASCIIEncoding.ASCII.GetBytes("<Packet OF Data Here>");
string IP = "127.0.0.1";
int port = "80";
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(IP), port);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
client.SendTo(packetData, ep);
}
Run Code Online (Sandbox Code Playgroud) 请检查我的多线程代理检查器代码.它总是检查相同的代理.我想我需要使用锁吗?但是当我使用锁时,它只使用一个线程.但通常它是多线程的.这是什么问题?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Threading;
namespace ProxyChecker
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void clearButton_Click(object sender, EventArgs e)
{
proxyList.Items.Clear();
}
private void clearButton2_Click(object sender, EventArgs e)
{
checkedList.Items.Clear();
}
Thread[] checkerThread;
int checking;
int beenChecked;
private bool isRunning;
private delegate void filterProxyHandler(int Index, bool Valid);
static readonly object _locker = new object();
private …Run Code Online (Sandbox Code Playgroud) 我为客户端和服务器创建了一个C程序,用于将数据从一台计算机传输到另一台计算机.以下代码
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
int sockfd;
struct sockaddr_in saddr;
char *xyz,xyz1;
sockfd = socket(AF_INET,SOCK_STREAM,0);
saddr.sin_family = AF_INET;
saddr.sin_port=htons(5001);
saddr.sin_addr.s_addr = inet_aton("192.168.0.254");
connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
fgets(xyz);
write(sockfd,xyz,sizeof(xyz));
read(sockfd,xyz1,sizeof(xyz1));
fputs(xyz);
close(sockfd);
}
Run Code Online (Sandbox Code Playgroud)
但它在trubo c ++ 3.0 IDE中显示以下错误
UNABLE TO OPEN INCLUDE FILE 'SYS/SOCKET.H'
UNABLE TO OPEN INCLUDE FILE 'NETINET/IN.H'
UNABLE TO OPEN INCLUDE FILE 'ARPA/INET.H'
Run Code Online (Sandbox Code Playgroud) 我可以发送文件的简单服务器和客户端,并且我需要你们看看此源是否已完成。因为我认为它不会下载完整文件。
也许对此来源有限制?因为我上传/下载了200K,还有更多..
服务器:
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
SOCKET Socket, Sub;
WSADATA Winsock;
sockaddr_in Addr;
int Addrlen = sizeof(sockaddr_in);
char Buffer[256];
char *Str;
sockaddr_in IncomingAddress;
int AddressLen = sizeof(IncomingAddress);
int main()
{
WSAStartup(MAKEWORD(2, 2), &Winsock); // Start Winsock
if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2) // Check version
{
WSACleanup();
return 0;
}
Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ZeroMemory(&Addr, sizeof(Addr));
Addr.sin_family = AF_INET;
Addr.sin_port = htons(6091);
bind(Socket, (sockaddr*)&Addr, sizeof(Addr));
if(listen(Socket, 1) == SOCKET_ERROR)
{
printf("listening error\n"); …Run Code Online (Sandbox Code Playgroud) 我正在编写一个服务器-多Thread客户端通信应用程序,我需要制作一个循环并接受客户端。我目前的代码是:
Thread acceptor = new Thread() {
public void run() {
while(true){
System.out.println("looking for clients");
try{
Socket s = serverSocket.accept();
clientList.add(new ConnectionToClient(s));
}
catch(IOException e){ e.printStackTrace(); }
}
}
}
};
acceptor.setDaemon(true);
acceptor.start();
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的应用程序时,文本looking for clients只出现一次,并且没有客户端可以连接。
我不明白为什么我的while(true)循环实际上没有循环,并且只运行一次。
编辑:
该ConnectionToClient构造函数是:
ConnectionToClient(Socket socket) throws IOException {
this.socket = socket;
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
Thread read = new Thread(){
public void run(){
while(true){
try {
Object obj = in.readObject();
messages.put(obj);
} …Run Code Online (Sandbox Code Playgroud) 这是代码
tcp_sockfd = socket(AF_INET , SOCK_STREAM , 0);
if (tcp_sockfd == -1) {
printf("Could not create socket");
return 1;
}
if (connect(tcp_sockfd , (struct sockaddr *)&config->tcp_srvaddr , sizeof(config->tcp_srvaddr)) < 0) {
printf("connect failed. return 1\n");
return 1;
}
struct timeval tv = {30, 0};
setsockopt(tcp_sockfd, SOL_SOCKET, SO_RCVTIMEO, (struct timeval *)&tv, sizeof(struct timeval));
if(send(tcp_sockfd , data , len , 0) < 0) {
printf("send failed.\n");
return 1;
}
printf("Send complete\n");
close(tcp_sockfd);
Run Code Online (Sandbox Code Playgroud)
如果套接字发送或连接失败,我是否需要关闭套接字?或者如果错误时钟自动关闭?
我正在我的项目中工作,我想在 C# 中使用套接字和线程进行本地 P2P 通信。我在运行代码时遇到了一些麻烦。
我认为问题出在下一个 while 循环中
while (true)
{
try
{
TcpListener listener = new TcpListener(IPAddress.Parse(STD_IP), HOST_PORT);
listener.Start();
using (TcpClient client = listener.AcceptTcpClient())
using (NetworkStream nwStream = client.GetStream())
{
Thread listenerThread = new Thread(() =>
{
string message = Receive(nwStream);
updateBoard(message);
});
listenerThread.Start();
string response = stanje;
Send(nwStream, response);
}
}
catch (Exception er)
{
MessageBox.Show("Communication error: \n\n" + er.Message + "\n" + er.StackTrace);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读一些代码并遇到以下语句:
struct sockaddr_in server
Run Code Online (Sandbox Code Playgroud)
我知道这sockaddr_in是一些预定义的,struct但为什么我们把它struct作为前缀?也如下所示,尝试了类似的事情
我不能只写:
sockaddr_in server
Run Code Online (Sandbox Code Playgroud)