创建客户端服务器应用程序 (serversocket) 时,我会创建 2 个单独的项目还是可以在单个项目中执行此操作?
我对这将是什么类型的项目感到有些困惑,而对如何启动客户端和服务器则更加困惑。
还是我必须手动启动终端并执行 jars?
这将是一个 serverock 和一个连接到它并发送简单消息的客户端。
我正在使用C++在Linux中开发客户端服务器应用程序(TCP).我想同时发送多个65,000字节.在TCP中,最大数据包大小65,535仅为字节.
如何在不丢失的情况下发送整个字节?
以下是我在服务器端的代码.
//Receive the message from client socket
if((iByteCount = recv(GetSocketId(), buffer, MAXRECV, MSG_WAITALL)) > 0)
{
printf("\n Received bytes %d\n", iByteCount);
SetReceivedMessage(buffer);
return LS_RESULT_OK;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用MSG_WAITALL它需要很长时间来接收字节,那么如何设置标志以便在时间上接收超过100万字节.
编辑:MTU大小为1500字节,但如果为65,535,则为TCP数据包大小的绝对限制.
一切都编译没有错误和警告。我启动程序。我访问 localhost:8080 并且程序停止了 - 太好了。我尝试再次运行该程序,但出现错误:无法绑定消息。为什么?
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PORT 8080
#define PROTOCOL 0
#define BACKLOG 10
int main()
{
int fd;
int connfd;
struct sockaddr_in addr; // For bind()
struct sockaddr_in cliaddr; // For accept()
socklen_t cliaddrlen = sizeof(cliaddr);
// Open a socket
fd = socket(AF_INET, SOCK_STREAM, PROTOCOL);
if (fd == -1) {
printf("Error: unable to open a socket\n");
exit(1);
}
// …Run Code Online (Sandbox Code Playgroud) 当我使用 netty 向网络服务器发送请求时。我得到以下异常。什么会导致这个异常?
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[na:1.7.0_25]
at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[na:1.7.0_25]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[na:1.7.0_25]
at sun.nio.ch.IOUtil.read(Unknown Source) ~[na:1.7.0_25]
at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[na:1.7.0_25]
at io.netty.buffer.UnpooledHeapByteBuf.setBytes(UnpooledHeapByteBuf.java:237) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:867) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:227) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:87) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:497) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:465) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:359) ~[netty-all-4.0.6.Final.jar:na]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) ~[netty-all-4.0.6.Final.jar:na]
at java.lang.Thread.run(Unknown Source) ~[na:1.7.0_25]
Run Code Online (Sandbox Code Playgroud) 客户端程序
public class client implements Runnable {
protected static String server_IP = "141.117.57.42";
private static final int server_Port = 5555 ;
protected static String client_IP ;
public static void main(String[] args) throws IOException{
final String host = "localhost";
int init = 0 ;
try {
InetAddress iAddress = InetAddress.getLocalHost();
client_IP = iAddress.getHostAddress();
System.out.println("Current IP address : " +client_IP);
} catch (UnknownHostException e) {
}
try {System.out.println("hello1");
Socket socket = new Socket(server_IP,server_Port);
System.out.println("hello3");
init = initialize(socket);
}catch (SocketException e) {
System.out.println("Error: …Run Code Online (Sandbox Code Playgroud) 假设我们有一个ServerSocket,我们运行accept().客户端连接并使用与ServerSocket相同的本地端口创建新套接字.假设客户端将数据发送到此套接字.它到达端口,并到达java应用程序.来自这里的数据如何到达正确的套接字?
假设两台计算机通过NAT隐藏在同一公共IP之后.这最终会产生问题吗?看起来好像同一台计算机正在尝试创建一个连接(相同的公共IP和相同的端口),我觉得好像我在这里遗漏了一些东西.
我使用ServerSocket和Socket对象编写了一个客户端/服务器 Java 程序。然后我修改了要使用的代码SSLServerSocket和“SSLSocket”,但是我抛出了不同的异常,包括:
javax.net.ssl.SSLHandshakeException: no cipher suites in common
我希望尽可能多地以编程方式做。我也可以使用自签名证书。
我遵循的一个教程建议使用keytooljava 应用程序创建一个证书,然后将该文件移动到您的 java 项目中。我已经用终端命令做到了keytool -genkey -alias zastore -keyalg RSA -keystore za.store。我指定的密码是password.
然后我调用该函数System.setProperty希望 SSLSockets 工作,但它仍然没有。
这是我的服务器代码
public class Server implements Runnable
{
private SSLServerSocket serverSocket;
private int portNumber;
private Thread acceptThread;
private LinkedList<Connection> connections;
private ConnectionListener connectionListener;
public Server(int port, ConnectionListener connectionListener)
{
this.connectionListener = connectionListener;
portNumber = port;
connections = new LinkedList<Connection>();
try
{
System.setProperty("javax.net.ssl.trustStore", "za.store"); …Run Code Online (Sandbox Code Playgroud) 上下文:由于DOS攻击,我在我的程序内存中的某个集合中有一张禁止ip地址的表.
我使用TCP服务器套接字,接受每个连接,然后检查IP地址,然后我关闭连接或继续处理客户端.
我想知道在Java中是否可以监听TCP服务器套接字上的连接,并在给定请求客户端的IP地址的情况下接受或拒绝以某种方式建立tcp链接.我的意思是不必接受&关闭客户端套接字,这是我已经在做的事情.
谢谢.
尽管ServerSocket类旨在通常侦听传入的连接,但是我可以只使用Socket对象并在java中检索传入的数据吗?如果是,那么我需要采取任何其他预防措施吗?
编辑:感谢您的答案......但是在UDP中只有一个套接字类--DatagramSocket对吗?
我使用boost:asio :: ip :: tcp :: acceptor在我的应用程序中创建服务器套接字.我使用close函数关闭此接受器套接字,而不是stop函数,io_service但所有连接的客户端套接字仅在我的应用程序关闭时关闭.我该如何解决这个问题?谢谢!