网络通讯项目总结
java中网络通讯主要是通过两个类来实现,一个是服务器(ServerSocket),另一个是客户端(Socket)。
首先,实现一个简单的服务器程序:
public class ChatServer {
/**
* 在指定端口上启动一个服务器
*/
public void setUpServer(int port){
try{
//建立绑定在指定端口上的服务器对象
ServerSocket server=new ServerSocket(port);
System.out.println("服务器创建成功!"+port);
while(true){
//让服务器进入等待状态:阻塞状态
Socket client=server.accept();
//从连接对象上得到输入输出流对象
OutputStream out=client.getOutputStream();
InputStream ins=client.getInputStream();
String s="你好,欢迎来javake.com\r\n";
byte[] data=s.getBytes();
out.write(data);
out.flush();
int in=0;
while(in!=13){
in=ins.read();
char ch=(char)in;
System.out.println("读到的是:"+ch);
}
System.out.println("得到回车,退出!");
client.close();
}
}catch(Exception ef){
ef.printStackTrace();
}
}
//主函数
public static void main(String[] args){
ChatServer cs=new ChatServer();
cs.setUpServer(9090);
}
}
然后用windows提供的telnet客户端去连接测试;服务器有IP和端口号,端口号的范围一般在0到65535之间。服务器有输出流
和输入流,输出流是输出信息到客户端的,输入流是接受客户端发来的信息的,我们通过相应的方法去处理接受的数据,同时
可以通过线程去解决信息阻塞的问题,实现发送消息的同时接受消息。
也可以用过各种途径实现网络五子棋,网络画板等网络程序。
客户端,跟服务器差不多,区别就是多个客户端可以同时连接一个服务器,然后客户端直接可以通讯。具体实现看代码。
package Client_v1;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class ClientThread extends Thread {
private Socket client;
private OutputStream ous;
private InputStream ins;
public ClientThread(Socket client){
this.client=client;
}
//界面组件
private JFrame frame=new JFrame("客户端");
private JTextArea Rjta=new JTextArea(8,25);
private JTextArea Sjta=new JTextArea(4,25);
private JButton sbt=new JButton("发送");
/**
* 显示界面
* @return
*/
public void showUI(){
frame.setSize(300,400);
frame.setTitle("客户端");
frame.setDefaultCloseOperation(3);
frame.setLayout(new FlowLayout());
frame.add(Rjta);
frame.add(Sjta);
frame.add(sbt);
frame.setVisible(true);
sbt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
SendMassager(Sjta.getText());
Sjta.setText("");
}
});
}
/**
* run方法
*/
public void run(){
showUI();
processMsg(client);
}
/**
* 处理消息的函数
*/
public void processMsg(Socket client){
client=this.client;
try {
ins=client.getInputStream();
while(true){
//Rjta.setText("服务器:"+readString(ins));
Rjta.append(readString(ins)+"\r\n");
System.out.println("1");
}
//client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 发送消息的方法
* @throws IOException
*/
public void SendMassager(String std) {
std=std+"\r\n";
byte data[]=std.getBytes();
try {
ous=client.getOutputStream();
ous.write(data);
ous.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 收到的字符换成字符串
* @throws IOException
*/
public String readString(InputStream ins) throws IOException{
StringBuffer std=new StringBuffer();
char ch=0;
int in=0;
while(ch!='\n'){
in=ins.read();
ch=(char)in;
std.append(ch);
}
System.out.println("xxx:"+std.toString());
return std.toString().trim();//trim为消除后面的空格符
}
public static void main(String[] args){
Socket soc;
try {
soc = new Socket("localhost",9090);
ClientThread cl=new ClientThread(soc);
cl.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
难点在于如何用线程去实现发收信息的同步。
分享到:
相关推荐
总结起来,这个网络通讯软件项目涵盖了C++编程、网络协议(TCP/UDP)、套接字编程、文件I/O、多线程编程等多个重要知识点。通过学习和分析这样的源代码,开发者可以提升自己在网络编程领域的技能,并了解如何构建...
总结起来,这个示例项目旨在提供关于如何使用socket进行本地和网络通信的实践教程,涵盖了Unix域socket和网络socket的基本操作。通过学习和实践这些代码,开发者能够更好地理解和掌握socket编程技术,这对于开发网络...
总结而言,"布谷鸟网络通讯"是一款全面且高效的网络通讯工具,其强大的图片传输、文件共享及硬盘监控功能,为用户提供了便捷的内网通信体验。无论是在办公室环境中协同工作,还是远程团队的协作,它都能成为可靠的...
在本项目中,"基于Java的网络通讯项目设计与实现"深入探讨了如何利用Java语言构建网络通信系统。这个项目不仅包含了一份详细的项目说明报告,还提供了实际的源代码,为学习者提供了一个完整的实践平台。以下是该项目...
总结来说,"异步网络通讯_Vc_"这个主题涵盖了异步网络编程的核心理念和技术实现,通过VC++的Winsock API或第三方库如Boost.Asio,可以构建出高效、可扩展的网络应用。学习并掌握这部分知识,对于开发高性能的网络...
总结来说,eMule网络通讯协议结合了TCP的可靠性、KAD的分布式特性、部分下载和源交换的效率优化、信用系统的行为激励以及安全性的保障,构建了一个高效、安全、去中心化的文件共享环境。对于想要开发类似系统的...
总结来说,基于FPGA的有源配电网实时仿真器高速网络通讯接口的设计,不仅能够有效地解决人机交互数据通讯的困难,还能够提升仿真的准确性和实时性,对于推动电力系统的现代化改造具有重要的现实意义。同时,该研究也...
### 西门子PLC相关通讯总结 #### MPI通讯(多点接口) MPI(Multi-Point Interface)是一种用于连接SIMATIC S7 CPU的接口技术,主要用于实现编程器、HMI设备与PLC之间的数据交换。MPI接口支持PPI(Point-to-Point ...
总结来说,STM32F103驱动W5500网络通讯涉及了微控制器的SPI接口配置、网络协议栈的控制、数据传输以及中断处理等多个技术层面。通过合理地编写和整合这些部分,开发者可以构建一个高效、稳定的嵌入式网络系统。在...
总结来说,TCP/IP网络通讯是一个复杂但重要的主题,涉及到网络协议、数据传输、错误控制等多个方面。通过实际的项目实践,我们可以更直观地理解这些概念,并提升自己的网络编程能力。如果你对此有进一步的兴趣或有...
总结来说,SIMATIC s7-300的网络通讯功能是其强大之处,通过多种通讯协议和模块,可以构建灵活、高效的自动化系统。学习并掌握这些通讯技术,对于理解和优化工业自动化系统的运行至关重要。通过分析300通讯.ppt和...
在本项目中,我们主要探讨的是如何利用Java技术来设计并实现一个网络通讯系统。Java是一种广泛应用于网络编程的语言,其跨平台性、强大的库支持以及面向对象的特性使其成为构建网络通信系统的理想选择。这篇论文结合...
总结,网络通讯协议的C++编程涉及到Winsock的使用,包括套接字的创建、连接、监听、数据传输以及错误处理等多个环节。通过实践和理解“winsocket6”这样的程序,我们可以深入掌握网络编程的核心技能,为未来的网络...
通过深入学习和实践,开发者能够更好地理解和掌握网络通讯的原理,从而在实际项目中实现更稳定、高效的数据交换。这个例子不仅适用于iPhone,也适用于其他使用相同技术栈的Apple设备,如iPad和iPod Touch。
在IT行业中,网络通讯是至关重要的一个领域,尤其是在软件开发中。C++作为一种强大的编程语言,提供了丰富的库和工具来实现网络通信。本示例源码着重展示了如何使用C++进行基本的网络通信操作,包括客户端和服务端的...
总结,VB.NET的网络通讯主要依赖于像`axWinsock`这样的控件,它提供了丰富的功能来处理网络连接、数据传输和错误处理。掌握这些技能对于任何希望在.NET平台上开发网络应用的开发者都是至关重要的。通过实践和理解`...
Netty即时通讯项目Demo是一...总结来说,这个"Netty即时通讯项目Demo"是一个很好的起点,帮助你理解如何使用Netty构建实时通讯应用。通过实践和学习,你可以逐步掌握Netty的强大功能,并将其应用于更复杂的网络服务中。
总结,PLC网络通讯涉及网络结构、硬件接口、通信协议、软件配置等多个方面,对于S7-200系列PLC,其通信特性包括PPI协议、自由口通信以及相关的特殊功能寄存器设置。理解这些知识点对于实现PLC与其他设备的有效通信至...
总结来说,这个C#网络通讯支持库通过`SocketBase`抽象类实现了对UDP、TCP和组播的支持,提供了灵活的网络通信解决方案。它的设计使得在不同协议间切换变得简单,有助于提高代码的可维护性和复用性。对于需要在网络...