当前位置:首页 » 编程软件 » socket网络编程java

socket网络编程java

发布时间: 2022-04-20 22:37:28

javaSocket网络编程怎么实现不在同一个网络下通讯

如果你需要直接通讯,那么这是网管的事。不通的网络是没有办法的。
不过如果大家都接了互联网,那么可以通过中间服务器转发的方式进行通讯。服务器C在公网。那么客户端a连接C,客户端b也连接C,就可以实现转发。现在大规模的通讯基本都是这个方式。

② java编程中,Socket通信是怎么实现的

java编程对于Socket之间的通信过程如下:

服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:

publicclassServer{

publicstaticvoidmain(Stringargs[])throwsIOException{
//为了简单起见,所有的异常信息都往外抛
intport=8899;
//定义一个ServerSocket监听在端口8899上
ServerSocketserver=newServerSocket(port);
//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}

}
客户端代码
Java代码publicclassClient{

publicstaticvoidmain(Stringargs[])throwsException{
//为了简单起见,所有的异常都直接往外抛
Stringhost="127.0.0.1";//要连接的服务端IP地址
intport=8899;//要连接的服务端对应的监听端口
//与服务端建立连接
Socketclient=newSocket(host,port);
//建立连接后就可以往服务端写数据了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//写完后要记得flush
writer.close();
client.close();
}

}

③ java程序关于eclipse运行socket程序

这里你没有理解java网络编程的原理,你这样
的代码运行是不可能进行通信的
问题1:
服务器端
虽然监听了端口,但是却没有建立和客户端的连接,也没有接受数据
问题2:客户端虽然建立了连接,却没有发送数据给服务器
具体还是多看看java网络编程(TCP/
IP网络
编程)

④ java中面向网络编程的问题Socket Serversocket

错误在客户端
写出数据的时候

flush()一下
String
str="用户:tom,登录的密码是123";
pw.write(str);
在这个后面加个
pw.flush();

⑤ java Socket通信原理

具体如下:

首先socket 通信是基于TCP/IP 网络层上的一种传送方式,我们通常把TCP和UDP称为传输层。其中UDP是一种面向无连接的传输层协议。UDP不关心对端是否真正收到了传送过去的数据。

如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。UDP常用在分组数据较少或多播、广播通信以及视频通信等多媒体领域。

在这里我们不进行详细讨论,这里主要讲解的是基于TCP/IP协议下的socket通信。

socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装。

服务端初始化ServerSocket,然后对指定的端口进行绑定,接着对端口及进行监听,通过调用accept方法阻塞。

此时,如果客户端有一个socket连接到服务端,那么服务端通过监听和accept方法可以与客户端进行连接。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

⑥ java做什么会用到socket

1、web项目的话一般用到的socket比较少,因为web项目的话一般运用了一些框架,它们帮你把这些东西都封装了,所以一般不会用到。
2、socket能然你较常接触主要是在网络编程中,很多东西没人帮你封装好,你要自己亲手去敲,去了解。比如你自己写一个聊天系统,你就会较广泛的去运用到socket

⑦ java Socket网络编程

调用 outt.flush ();

⑧ java网络编程,使用Socket访问web服务器

temp.length == 0 的时候退出。
下边使用 temp 的时候 ,temp 不是 null 但是每次都能读取到一个 0长度的返回。所以会死循环,知道服务器断开。
可以边读取socket返回就别写入文件了呀。你这样读逻辑不对。

⑨ 如何把Java中的Socket类和ServerSocket类装在一个类中,实现网络编程的通信

这个简单 我发个程序 你看下

package server;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Properties;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;

import util.StringUtil;

public class FromOnLineBankToBackSocket {

private static ServerSocket server; //定义服务器端口,用于客户短访问
private Socket client; // 定义服务器端套接字,用于为来访用户分配可使用的端口
private ClientThreads thread1; //定义线程对象

/*static {
try {

server = new ServerSocket(3000);
System.out.println(server.getLocalSocketAddress());
} catch (IOException e) {
}//实例服务器端口号
}*/

public FromOnLineBankToBackSocket() {
try {
server = new ServerSocket(9001);
System.out.println(server.getLocalSocketAddress());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while (true) {
try {
client = server.accept(); //为来访用户分配可以使用的端口

System.out.println("***********"
+ client.getRemoteSocketAddress() + "已经连接"
+ "***********");
} catch (IOException e) {
e.printStackTrace();
}
if (client != null) { //如果端口号存在,则启动线程
thread1 = new ClientThreads(client);
thread1.start(); //运行线程

}
}

}

public static void main(String[] args) {
new FromOnLineBankToBackSocket();//启动服务端监听

}

class ClientThreads extends Thread { // 线程类

private InputStream is;

private OutputStream os;
private Socket client;

public ClientThreads(Socket client) {
this.client = client;
try {
os = client.getOutputStream();
is = client.getInputStream();

} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 接收客户端传来的数据
*
* @return
*/
public String receive() {
byte[] buf = new byte[1024];
String s = "";
try {
int count = 0;
int times = 0;
while (is.available() == 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
times++;
if (times == 10) {
break;
}
}
while (is.available() > 0) {
if ((count = is.read(buf)) != -1) {
s += new String(buf, 0, count, "UTF-8");
}
}

} catch (IOException e) {
e.printStackTrace();
}
return s;
}

/**
* 向客户端发送响应代码
*
* @param s
*/
public boolean send(String msg) {
String serverIp = "192.168.0.41";
int portNo = 9578;
OutputStream out;

System.out.println("发送到后台的报文为:");
try {
Socket socket = new Socket(serverIp, portNo);
System.out.println("socket connected successful!");
out = (socket.getOutputStream());

out.write(msg.getBytes("UTF-8"));
out.flush();

try {
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
} catch (UnknownHostException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}

/**
* 关闭响应的资源
*/
public void close() {

try {

is.close();
os.close();
client.close();
is = null;
os = null;
client = null;
} catch (IOException e) {
e.printStackTrace();
}

}

public void run() { // 线程run方法

String msg = receive();

send(msg);

}

}

}

热点内容
数字化储存与编译是什么 发布:2025-05-18 02:56:55 浏览:216
个人网站模板源码 发布:2025-05-18 02:51:17 浏览:489
主服务器ip地址 发布:2025-05-18 02:46:29 浏览:854
电脑配置太低玩不了绝地求生怎么办 发布:2025-05-18 02:38:39 浏览:796
存储过程怎么出错了 发布:2025-05-18 02:37:16 浏览:367
32寸算法 发布:2025-05-18 02:22:14 浏览:743
宝塔数据库备份 发布:2025-05-18 02:14:18 浏览:192
安卓商店下载的光遇是什么服 发布:2025-05-18 02:13:38 浏览:31
网页挖矿源码 发布:2025-05-18 02:13:34 浏览:307
centosftp服务器设置参数 发布:2025-05-18 02:12:55 浏览:216