Java网络编程2---Socket-TCP编程

Sockct:插座

Socket是关于TCP的。

端口号:两个字节->65536个端口号,一个应用程序占多个端口号;

但是假设一个应用程序占一个端口号;一台电脑会有65535个应用程序。

自己编写程序要占用端口号1024以上后的。

80端口:网页

端口号分为:TCP端口和UDP端口。每个有65535个端口。




通过管道(流)来说话

栗子:
服务器端:

package com.zhj.www;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.*;
public class TCPServer {public static void main(String[] args)throws Exception {ServerSocket ss = new ServerSocket(6666);//服务器监听6666端口口while(true) {	Socket s =ss.accept();//自身建立一个Socket与客户端连接System.out.println("A client connect!");//阻塞式的连接,一个客户端连接,另外一个客户端不会链接。DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF());dis.close();s.close();}}
}

客户端:

package com.zhj.www;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;
public class TCPClient {public static void main(String[] args) throws Exception {Socket s = new Socket("127.0.0.1", 6666);//建立连接,client随机某个端口去连接服务器的6666OutputStream oStream = s.getOutputStream();//拿到输出管道;DataOutputStream dataOutputStream = new DataOutputStream(oStream);dataOutputStream.writeUTF("hello server!");dataOutputStream.flush();dataOutputStream.close();s.close();}
}

-----------------------------------------------------------------------------

---------------------------------------------------------------------------->

栗子1:(一端说,一端听):TestServer.java &&TestClient.java

服务器端:
package com.zhj.www;import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer {/*拿到服务器端的数据写到客户端*/public static void main(String[] args) {try {ServerSocket  ss = new ServerSocket(8888);while(true) {Socket socket  = ss.accept();OutputStream oStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(oStream);dataOutputStream.writeUTF("Hello,"+socket.getInetAddress()+"port #"+socket.getPort()+" bye-bye");//客户端的端口号是随机的dataOutputStream.close();socket.close();}}catch (Exception e) {e.getStackTrace();System.out.println("程序运行出错:"+e);}}}
客户端:
package com.zhj.www;import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.Socket;public class TestClient {public static void main(String[] args) {try {Socket socket = new Socket("127.0.0.1", 8888);InputStream is =socket.getInputStream();DataInputStream dInputStream = new DataInputStream(is);System.out.print(dInputStream.readUTF());dInputStream.close();socket.close();}catch (ConnectException connExc) {connExc.getStackTrace();System.out.println("服务器连接失败!");} catch (IOException e) {e.getStackTrace();}}}

--------------------------------------------------------------------------------->

栗子2(两端都说,两端都听) TestSocketServer.java && TestSocketClient.java

服务器端:

package com.zhj.www;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestSocketServer {public static void main(String[] args) {InputStream in = null;OutputStream out	= null;try {ServerSocket ss	= new ServerSocket(5888);Socket socket = ss.accept();in	= socket.getInputStream();out = socket.getOutputStream();DataOutputStream dataOutputStream	=	new DataOutputStream(out);DataInputStream dataInputStream = new DataInputStream(in);String string = null;if ((string = dataInputStream.readUTF()) != null) {System.out.println(string);System.out.println("from: "+socket.getInetAddress());System.out.println("Port:"+socket.getPort());}dataOutputStream.writeUTF("hi,hello");dataOutputStream.close();dataInputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

客户端:

package com.zhj.www;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class TestSocketClient {public static void main(String[] args) {InputStream inputStream =null;OutputStream outputStream = null;try {Socket socket= new Socket("localhost", 5888);inputStream = socket.getInputStream();outputStream  =socket.getOutputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("hey");String string = null;while((string = dataInputStream.readUTF())!= null) {System.out.println(string);	}dataOutputStream.close();dataInputStream.close();socket.close();}catch (UnknownError e) {e.printStackTrace();} catch (IOException e) {e.getStackTrace();}}
}

栗子3:聊天程序:







本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

winform绑定多张图片

开发winform程序的时候经常设计到要显示多张图片的问题,其解决思路一般是先遍历文件夹中的所有图片,然后再把这些图片添加到ImageList控件中,最后再绑定显示出来。这里我们介绍两种绑定的方法: (一)动态生成…

Java网络编程3---Socket-UDP编程

栗子:TestUDPServer.java 服务器端: package com.zhj.www;import java.net.DatagramPacket; import java.net.DatagramSocket;public class TestUDPServer {public static void main(String[] args)throws Exception {byte buf[] new byte[1024];Datagr…

iOS 6 自动布局入门

http://www.raywenderlich.com/zh-hans/22873/ios-6-自动布局-入门-1转载于:https://www.cnblogs.com/ihojin/p/auto-layout.html

Java GUI 基础知识

这部分主要包含AWT、组件和容器、布局管理器Component:所有可以和用户交互的图形元素,他的子类有:输入框… Java.awt及其子包 Container:容器,容纳其他各种各样的Component的元素。 Panel:可以容纳其他元素…

UVA11300

初步解题原理:代数运算单元素极值 代数运算: xi表示第i个给i-1的数量,正负表示给或得 c(a1a2a3....an)/n a1-x1x2c -->x2x1-a1c a2-x2x3c -->x3x1-a1-a22c a3-x3x4c -->x4x1-a1-a2-a33c ...... an-xnx1c -->xnx1-a1-a2-a3....-a(n-1)(n-1)c ansmax{|x1|…

Java GUI 基础知识2 监听机制

TestActionEvent.java没有调用方法,但是有反应。反应自己要编写程序有反应。 事件模型:一定要有某些反应。 写程序,监听的操作是自动发生的,一直监听。钩子函数,(回调函数) 怎么让它自动执行&am…

求字符串的最长回文字串 O(n)

昨天参加了某公司的校园招聘的笔试题,做得惨不忍睹,其中就有这么一道算法设计题:求一个字符串的最长回文字串。我在ACM校队选拔赛上遇到过这道题,当时用的后缀数组AC的,但是模板忘了没写出代码来。 回头我把这道题目再…

数据结构 二、向量(接口与实现and可扩容向量)

ADT操作实例:Disordered:显示出3对逆序紧邻对。Vector模板类初始有效空间为0;基于复制的构造描述区间:左闭右开 为什么*2?有限时间内不必要为扩容而打断。 2、可扩充向量左移一位:加一倍

数据库:mysql 获取刚插入行id[转]

我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。 下面介绍三种方法 (1) getGeneratedKeys()方法: 程序片断: Connection conn ; …

svn由于连接方在一段时间后没有正确答复或连接的主机没有反应连接尝试失败...

解决方法,关掉防火墙, service iptables status 查看iptables状态 service iptables restart iptables服务重启 service iptables stop iptables服务禁用 转载于:https://www.cnblogs.com/jiqing9006/p/3347441.html

Android 服务(Service)

一、服务的解释 服务(Service)是Android中实现后台运行的解决方案,它适合那些去执行不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖任何的与任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应…

CenOS 配置C/C++语言

1.下载eclipseCDT组合包。 2.电脑上安装GCC, G 3.在eclipse上创建一个C project 4. Eclipse CDT功能很强大,安装完虽然可以编译运行c程序,但有个问题,就是找不到c标准库的头文件,无法打开诸如之类的文件,编…

(数据结构)前缀,后缀以及中缀表达式

中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 前缀表达式(前缀记法、波兰式) 前缀表达式是一种没有括号的算术表…

Moravec角点检测算子

Moravec角点检测算子 Moravec 在1981年提出Moravec角点检测算子[1],并将它应用于立体匹配。 首先, 计算每个像素点的兴趣值, 即以该像素点为中心, 取一个w*w(如:5x5)的方形窗口, 计算0度、45度、90度、135度四个方向灰度差的平方和, 取其中的最小值作为该像素点的兴…

java习题-练习1

1、 Given the string, check if it is a palindrome.(回文) Example For inputString "aabaa", the output should becheckPalindrome(inputString) true;For inputString "abac", the output should becheckPalindrome(inputSt…

文件夹生成工具

很简单的一个小工具,输入一个字符串,可以为你生成相应的文件夹. 至于有什么用?我公司一个策划拿一顿饭给我要的. 下载地址: http://pan.baidu.com/s/1d0ewl 转载于:https://www.cnblogs.com/WhyEngine/p/3350053.html

java中System.exit(1)、System.exit(0)、以及return的区别

System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序System.exit(status)不管status为何值都会退出程序。 和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层

(转载)深入理解Linux中内存管理---分段与分页简介

首先,必须要阐述一下这篇文章的主题是Linux内存管理中的分段和分页技术。 来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的。换句话说,就是程序在运行的过程中访问的都是物理地址。如果这个系统只运行一个程序&…

eclipse解决Android Library Project jar包重复导致的问题

Android Studio部分情况下用起来还是有些不适应的地方,用eclipse熟练了,在赶项目进度的情况下还得重拾eclipse。下面是今天碰到的一个老问题。 1.在导入Android Library工程文件的时候要把library一起拷贝到workspace中 2.在导入的Android Library工程文…

java中main函数的args参数

先说一下args的作用:我们习惯将一些有用的参数传递给我们定义的函数,那么可曾想过有参数传递给main函数?args就是传递给main函数的一个数组参数。可是main函数作为程序(application程序)的入口点,是由系统自动调用的,怎…