导航:首页 > IDC知识 > java服务器tcp连接

java服务器tcp连接

发布时间:2021-01-14 13:15:11

1、java中TCP服务器连接数据库查询的问题

查询获得的结果是不是很大,本地返回很快,如果通过网络结果集很大的话就很慢,毕竟要握手之类的。

2、java代码TCP/IP网络通信服务器客户端,实现双方信息交互。

package com.weixin.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

public class ScoketTest {

@Test
public void client() throws Exception{

InetAddress i=InetAddress.getByName("127.0.0.1");


Socket s=new Socket(i, 9000);

OutputStream outputStream = s.getOutputStream();

outputStream.write("服务端你好,我是客户端哦!".getBytes());

s.shutdownOutput();
InputStream inputStream=s.getInputStream();

int length=0;

byte[] bytes=new byte[1024];

while ((length=inputStream.read(bytes))!=-1) {
System.err.println(new String(bytes,0,length));
}

inputStream.close();
outputStream.close();
s.close();
}


@Test
public void server() throws Exception{

ServerSocket serverSocket=new ServerSocket(9000);

Socket socket = serverSocket.accept();

InputStream inputStream = socket.getInputStream();

OutputStream outputStream = socket.getOutputStream();

int length=0;

byte[] bytes=new byte[1024];

while ((length=inputStream.read(bytes))!=-1) {
System.err.println(new String(bytes, 0,length));
}

outputStream.write("客户端你好,本王已收到!".getBytes());

outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();




}

}

3、求java网络高手,tcp最大连接问题

网络上来盛传的那个改连接数,我认自为基本上没用,关键是你要了解他的原理,
它的作用是改变单位时间内的并发连接数,也就是说你写个程序,想要在1秒内连接超过50(假设)此连接,是不被允许的,你只能达到10个,我认为一般应用足够了,比如下载应用,1秒不够,稍后软件都会重试,并不会影响你的下载速度,像windows 2003这样的操作系统,是不会做此限制的,作为服务器,它的目标就是提高网络吞吐量。
这样解释能明白否?

4、java网络编程中,对于客户端和服务器的tcp连接,如果客户端异常断开连接,服务器端如何获知,有什么方法?

这个得用java心跳处理机制。就是客户端每隔一段时间向服务器发送指定信息,如果服务器没有收到客服端发来的信息,这时服务器和客服端连接就已经断开。具体的心跳实现百度上很多。

5、java中,用哪一个类来表示tcp协议的服务器socket对象

服务端监复听:ServerSocket server=new ServerSocket(port);//port:绑定的端制口号
Socket client=server.accept();//监听端口,一旦取得连接则获得客户端的socket连接对象client

客户端: Socket s=new Socket(ip,port);//要连接的服务器的ip以及端口号

如果正常连接上之后,socket的对象可以获得InputStream和OutputStreame,然后就可以进行通信了

完成通信之后,执行socket对象的close()方法关闭连接,完成一次完整的socket连接

6、有个Java 项目,通过Socket Tcp长连接通信方式向服务器发送消息。

你这消息头、消息体的结构格式都定下来了,总长度就是固定的啊?消息体的长专度不是一共2+2+4+1=9个字节么属?消息格式肯定要按照服务端的要求进行发送,明显服务端不是java的程序。。但是java里是没有Unsigned Integer这种数据类型的(java的stream操作里提供了一些unsigned的方法,或者自己写方法来生成对应的字节格式),你可以按照他的要求,使用字节数组封装好,然后发送。
针对这个示例消息,你可以:
创建一个长度为9的字节数组。把“9”变成byte放入前两个字节(前两个字节数据应该为:0x00, 0x09。这是第一个字段,长度),后面的字段数据以此类推。一个字段一个字段处理成服务器要求的格式。
然后把字节流发送给服务端。

7、请问JAVA中创建一个TCP服务器端程序的骤是什么呢?

1.建立一个服务器socket并开始监听.

2.使用accept()方法取得新的连接.

3.建立输入和输出流.

4.在已专有的协议上产生会属话.

5.关闭客户端流和socket.

6.回到第二步或者到第七步.

7.关闭服务器socket.

8、想用JAVA做一个服务器,请问怎么利用TCP和线程,实现多个客户端同时在线,能与服务器进行交互?

服务器监听端口 做个无限循环 接到一个连接就创建一个通道线程,并将通道线程存储到一个list集合中

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/*
 * 4.用socket通讯写出多个客户端和一个服务器端的通讯,
 * 要求客户发送数据后能够回显相同的数据(回显功能)(实用TCP方式)。
 */
public class Test4Server {



// 主入口
public static void main(String[] args) throws IOException {
scoketServer();
}

// 开启的tcp8888监听端口
public static void scoketServer() throws IOException {
ServerSocket server = new ServerSocket(8888);
while (true) {
// 未连通前线程阻塞,连通后开启一个socket通道线程后继续监听8888端口
Socket socket = server.accept();
System.out.println(socket.getInetAddress().getHostAddress()
+ "连接进入");
new SocketThread(socket).start();
}
}



}

// 一个服务器端口中监听多个客服端通道线程
class SocketThread extends Thread {
//  所有通道写入流的集合
private static List<PrintWriter> list =new ArrayList<PrintWriter>();

private BufferedReader bufferedReader;
private PrintWriter printWriter;

public SocketThread(Socket socket) throws IOException {
this.bufferedReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
this.printWriter = new PrintWriter(socket.getOutputStream());
list.add(printWriter);
}

@Override
public void run() {
String string = null;
while (true) {
try {
// 服务器在通道中读到的信息回显给客服端
string = bufferedReader.readLine();
System.out.println("客服端信息:" + string);
for(PrintWriter printWriter:list ){
printWriter.write("服务器回显:" + string + " ");
printWriter.flush();
}
} catch (IOException e) {

}
}

}
}

客服端代码 可以用在局域网中用多台来连接测试

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Test4Client {
public static Object obj = new Object();

// 客服端的主入口
public static void main(String[] args) throws IOException {
socketClient();
}

// 与服务器连通地址本机(127.0.0.1),局域网中其他机器是(服务器在局域网中的ip地址) 端口都是8888
public static void socketClient() throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
if (socket.isConnected()) {
// 如果连接成功了就开启写和读的进程
new writer(socket).start();
new read(socket).start();
} else {
System.out.println("服务器未开启");
}
}
}

// 写入到通道的线程
class writer extends Thread {
@SuppressWarnings("unused")
private Socket socket;
private PrintWriter printWriter;
private Scanner scanner = new Scanner(System.in);
private String str = null;

public writer(Socket socket) throws IOException {
this.socket = socket;
this.printWriter = new PrintWriter(socket.getOutputStream());

}

@Override
public void run() {
scanner.useDelimiter(" ");

while (true) {
System.out.print("请输入信息:");
// 产生扫描器的线程阻塞
str = scanner.next();
System.out.println("我说:"+str);
printWriter.write(str + " ");
printWriter.flush();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

// 从通道中读取的线程
class read extends Thread {
private Socket socket;
private BufferedReader bufferedReader;
private String str = null;

public read(Socket socket) throws IOException {
this.socket = socket;
this.bufferedReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
}

@Override
public void run() {
while (true) {

try {
str = bufferedReader.readLine();
System.out.println(str);
} catch (IOException e) {
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {

e.printStackTrace();
}
}
}
}

9、Java TCP如何实现一个服务器向多个客户机发送信息?

你服务器accept方法后是不是会得到一个Socket

为这个Socket(是通过这个Socket和客户端的Socket进行沟通)分配一个服务

我是这么用的ServerThread tt=new ServerThread(socket);

class ServerThread
{
private Socket so;
public ServerThread(Socket s)
{
this.so=s;

}

public void send()
{

}

public void receive()
{
Thread re=new Thread()

{
public void run()

{

}
}
}
}

相当于你用手机拨打人工服务,会给你分配一个客服

为这个Socket分配后,写一个发送方法,和一个接收方法(线程)

然后把ServerThread tt=new ServerThread(socket);中的tt保存到集合中去,要单独给某个发送

就从集合中取出来.send();这个方法应该带个参数,把消息对象传过去就是

10、java 的 tcp 建立客户端和服务器的连接问题

0.0.0.0表示监听所有IP,在有公网IP的情况下,云服务器上一般这么填写

与java服务器tcp连接相关的知识