導航:首頁 > 編程語言 > socket編程源碼

socket編程源碼

發布時間:2022-08-09 05:06:02

⑴ 100分求C#非同步Socket源碼.

TCP協議的接收端using System.Net.Sockets ; //使用到TcpListen類using System.Threading ; //使用到線程 using System.IO ; //使用到StreamReader類int port = 8000; //定義偵聽埠號private Thread thThreadRead; //創建線程,用以偵聽埠號,接收信息private TcpListener tlTcpListen; //偵聽埠號private bool blistener = true; //設定標示位,判斷偵聽狀態private.NetworkStream nsStream; //創建接收的基本數據流 private StreamReader srRead;private System.Windows.Forms.StatusBar statusBar1;private System.Windows.Forms.Button button1;private System.Windows.Forms.ListBox listBox1; //從網路基礎數據流中讀取數據private TcpClient tcClient ;private void Listen ( ) { try { tlTcpListen = new TcpListener ( port ) ; //以8000埠號來初始化TcpListener實例tlTcpListen.Start ( ) ; //開始監聽statusBar1.Text = "正在監聽..." ; tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通過TCP連接請求nsStream = tcClient.GetStream ( ) ; //獲取用以發送、接收數據的網路基礎數據流srRead=new StreamReader(nsStream);//以得到的網路基礎數據流來初始化StreamReader實例statusBar1.Text = "已經連接!"; while( blistener ) //循環偵聽{ string sMessage = srRead.ReadLine();//從網路基礎數據流中讀取一行數據 if ( sMessage == "STOP" ) //判斷是否為斷開TCP連接控制碼{ tlTcpListen.Stop(); //關閉偵聽nsStream.Close(); //釋放資源srRead.Close(); statusBar1.Text = "連接已經關閉!" ; thThreadRead.Abort(); //中止線程return; } string sTime = DateTime.Now.ToShortTimeString ( ) ; //獲取接收數據時的時間listBox1.Items.Add ( sTime + " " + sMessage ) ; } } catch ( System.Security.SecurityException ) { MessageBox.Show ( "偵聽失敗!" , "錯誤" ) ; } }//開始監聽private void button1_Click(object sender, System.EventArgs e){thThreadRead = new Thread ( new ThreadStart ( Listen ) );thThreadRead.Start();//啟動線程 button1.Enabled=false; }// 清理所有正在使用的資源。protected override void Dispose( bool disposing ){try { tlTcpListen.Stop(); //關閉偵聽 nsStream.Close();srRead.Close();//釋放資源 thThreadRead.Abort();//中止線程 } catch{}if( disposing ){if (components != null) {components.Dispose();}}base.Dispose( disposing );}TCP協議的發送端using System.Net.Sockets; //使用到TcpListen類using System.Threading; //使用到線程using System.IO; //使用到StreamWriter類using System.Net; //使用IPAddress類、IPHostEntry類等private StreamWriter swWriter; //用以向網路基礎數據流傳送數據private.NetworkStream nsStream; //創建發送數據的網路基礎數據流private TcpClient tcpClient;private System.Windows.Forms.Button button1;private System.Windows.Forms.TextBox textBox1;private System.Windows.Forms.Button button2;private System.Windows.Forms.TextBox textBox2;private System.Windows.Forms.StatusBar statusBar1;private System.Windows.Forms.Label label1;private System.Windows.Forms.Label label2; //通過它實現向遠程主機提出TCP連接申請private bool tcpConnect = false; //定義標識符,用以表示TCP連接是否建立//連接private void button1_Click(object sender, System.EventArgs e){IPAddress ipRemote ; try { ipRemote = IPAddress.Parse ( textBox1.Text ) ; } catch //判斷給定的IP地址的合法性{ MessageBox.Show ( "輸入的IP地址不合法!" , "錯誤提示!" ) ; return ; } IPHostEntry ipHost ; try { ipHost = Dns.Resolve ( textBox1.Text ) ; } catch //判斷IP地址對應主機是否在線{ MessageBox.Show ("遠程主機不在線!" , "錯誤提示!" ) ; return ; } string sHostName = ipHost.HostName ; try { TcpClient tcpClient = new TcpClient(sHostName,8000);//對遠程主機的8000埠提出TCP連接申請nsStream = tcpClient.GetStream();//通過申請,並獲取傳送數據的網路基礎數據流swWriter = new StreamWriter(nsStream);//使用獲取的網路基礎數據流來初始化StreamWriter實例button1.Enabled = false ; button2.Enabled = true ; tcpConnect = true ; statusBar1.Text = "已經連接!" ; } catch { MessageBox.Show ( "無法和遠程主機8000埠建立連接!" , "錯誤提示!" ) ; return ; } }//發送private void button2_Click(object sender, System.EventArgs e){if (textBox2.Text !="") { swWriter.WriteLine(textBox2.Text);//刷新當前數據流中的數據swWriter.Flush(); } else {MessageBox.Show("發送信息不能為空!","錯誤提示!"); }}// 清理所有正在使用的資源。protected override void Dispose( bool disposing ){if ( tcpConnect ) { swWriter.WriteLine ( "STOP" ) ; //發送控制碼swWriter.Flush (); //刷新當前數據流中的數據nsStream.Close (); //清除資源swWriter.Close (); } if( disposing ){if (components != null) {components.Dispose();}}base.Dispose( disposing );}非同步套接字BeginAcceptPublic IAsyncResult BeginAccept{AsyncCallback callback,object state}AsyncCallback非同步回調方法 object state自定義對象, 返回IasyncResultUsing System;Namespace mySocket{Public class Stateobject{Public StateObject(){構造函數邏輯}}}à>Using System;Using System.Net;Using System.Net.Sockets;Using System.Threading;Using System.Text;Namespace mysocket{Public Class StateObject{Public Socket worksocket=null;Public const int buffersize=1024;Public byte[] buffer=new byte[buffersize]; Public StringBuilder sb=new StringBuilder();Public StateObject(){}}}實現主機綁定和埠監聽:Private IPAddress myIP=IPAddress.Parse(「127.0.0.1」);Private IPEndPoint MyServer;Private Socket mySocket;Private Socket Handler;Private Static ManualResetEvent myreset =new ManualResetEvent(false);Try{IPHostEntry myhost=new IPHostEntry();Myhost=dns.gethostbyName(「」);String IPString =myhost.Addresslist[0].tostring();Myip=IPAddress.Parse(IPString);}Catch{MessageBox.Show(「您輸入的IP地址格式不正確,重新輸入!」);}Try{MyServer=new IPEndPoint(myIP,Int32.Parse(「Port」));Mysocket=new Socket(AddressFamily.Inte.Network,SocketType.Stream,Protocol.Tcp);Mysocket.Bind(Myserver);Mysocket.Listen(50);Thread thread=new Thread(new ThreadStart(target));Thread.Start();}Catch(Exception ee){}線程targetPrivate void target(){While(true){myReset.Reset();mysocket.BeginAccept(new AsyncCallBack(AcceptCallback),mysocket);myReset.WaitOne();}}非同步回調方法AcceptCallBackPrivate void AcceptCallback(IAsyncResault ar){myReset.Set();Socket Listener=(Socket)ar.AsyncState;Handler=Listener.EndAccept(ar);StateObject state=new StateObject();State.workSocket=handler;Try{Byte[] byteData=System.Text.Encoding.BigEndianUnicode.GetBytes(「通話!」+」\n\r」);Handler.BeginSend(byuteData,0,byteData.Length,0,new AsyncCallback(SendCallback),handler);}Catch(Exception ee){MessageBox.Show(ee.Message);}Thread thread=new Thread(new ThreadStart(begreceive));Thread.Start();}

⑵ socket java 源代碼

很久以前做的了,啟動程序兩次,在單選框中選伺服器點連接(一定要先點伺服器-連接),在在另外一個界面中選客戶端點連接;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class QQ extends JFrame implements ActionListener{
public static void main(String args[]){
QQ qq=new QQ();

}
String input;
ServerSocket ss;
Socket s1,s2;
PrintWriter pw;
BufferedReader br;
private server s;
private client cc;
private JLabel l1,l2,l3,l4,l5;
private JRadioButton jb[]=new JRadioButton[2];
private JTextField jf1,jf2,jf3;
private JButton j1,j2,j3;
private JTextArea ja;
public QQ(){
super("聊天");
Container c=getContentPane();
c.setLayout(null);
l1=new JLabel("TCP通信程序");
l1.setFont(new Font("宋體",Font.BOLD,16));
l1.setBackground(Color.black);
l1.setSize(2000,20);
l1.setLocation(10,10);
c.add(l1);
String str1[]={"服務端","客戶端"};

ButtonGroup bg=new ButtonGroup();
for(int x=0;x<str1.length;x++)
{
jb[x]=new JRadioButton(str1[x]);
jb[x].setFont(new Font("宋體",Font.BOLD,15));
jb[x].setForeground(Color.black);
jb[x].setSize(80,40);
jb[x].setLocation(10+x*80,37);
bg.add(jb[x]);
c.add(jb[x]);
}
jb[0].setSelected(true);

l2=new JLabel("連接主機IP");
l2.setFont(new Font("宋體",Font.BOLD,16));
l2.setBackground(Color.black);
l2.setSize(120,20);
l2.setLocation(20, 80);
c.add(l2);

jf1=new JTextField("127.0.0.1");
jf1.setSize(220,30);
jf1.setLocation(120, 80);
c.add(jf1);

jf3=new JTextField("離線");
jf3.setSize(150,30);
jf3.setLocation(280, 40);
c.add(jf3);

l5=new JLabel("連接狀態:");
l5.setFont(new Font("宋體",Font.BOLD,16));
l5.setBackground(Color.black);
l5.setSize(120,20);
l5.setLocation(200, 47);
c.add(l5);

j1=new JButton("連接");
j1.setSize(110,20);
j1.setLocation(360,85);
j1.addActionListener(this);
c.add(j1);

l3=new JLabel("接收到的信息");
l3.setFont(new Font("宋體",Font.BOLD,16));
l3.setBackground(Color.black);
l3.setSize(120,20);
l3.setLocation(20, 130);
c.add(l3);

ja=new JTextArea();
ja.setSize(250,200);
ja.setLocation(130, 130);
c.add(ja);

l4=new JLabel("發送信息");
l4.setFont(new Font("宋體",Font.BOLD,16));
l4.setBackground(Color.black);
l4.setSize(120,20);
l4.setLocation(20, 340);
c.add(l4);

jf2=new JTextField("gf");
jf2.setSize(220,30);
jf2.setLocation(120, 340);
c.add(jf2);

j2=new JButton("發送信息");
j2.setSize(110,20);
j2.setLocation(360,350);
j2.addActionListener(this);
c.add(j2);

j3=new JButton("結束連接");
j3.setSize(110,20);
j3.setLocation(360,110);
j3.addActionListener(this);
c.add(j3);
s=new server();
cc=new client();
j3.setEnabled(false);
j2.setEnabled(false);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,450);
setVisible(true);
setLocation(300,300);
}

public void actionPerformed(ActionEvent e) {
// TODO 自動生成方法存根

if(e.getSource()==j1)
{
try{
if(jb[0].isSelected()==true)
{
input="";
s.start();
}
else {
input="";
cc.start();
}
}
catch(Exception ee)
{
jf3.setText("發生錯誤");
}
}

if(e.getSource()==j2)
{

pw.write(jf2.getText()+"\n");

pw.flush();

}

if(e.getSource()==j3)
{
try
{
if(jb[0].isSelected()==true)
{ s1.close();
jf3.setText("離線");

j2.setEnabled(false);
j3.setEnabled(false);

}

else
{

s2.close();
jf3.setText("離線");
j2.setEnabled(false);
j3.setEnabled(false);

}
}
catch (Exception e1) {
// TODO 自動生成 catch 塊

}

}

}

class server extends Thread{
public void run(){
try {

j1.setEnabled(false);

jf3.setText("正在連接中@");

ss=new ServerSocket(4000);
s1=ss.accept();

br=new BufferedReader(new InputStreamReader(s1.getInputStream()));
pw=new PrintWriter(s1.getOutputStream(),true);
// bs=new BufferedOutputStream(os);
while(true){
if(ss.isBound()==true){

jf3.setText("連接成功");
j2.setEnabled(true);
j3.setEnabled(true);
break;
}
}
while(true)
{
input=br.readLine();

if(input.length()>0){
ja.append(input);
ja.append("\n");

}

}

} catch (Exception e) {
// TODO 自動生成 catch 塊

}

}

}

class client extends Thread{
public void run(){
try {

j1.setEnabled(false);
jf3.setText("正在連接中@");
s2=new Socket(InetAddress.getByName(jf1.getText()),4000);

// s2=new Socket();
// s2.connect(new InetSocketAddress(jf1.getText(),21),1000);
br=new BufferedReader(new InputStreamReader(s2.getInputStream()));
pw=new PrintWriter(s2.getOutputStream(),true);

// bs=new BufferedOutputStream(os);
while(true){
if(s2.isConnected()==true){
jf3.setText("連接成功");
j2.setEnabled(true);
j3.setEnabled(true);
break;

}

}

input="";
while(true){
input=br.readLine();
if(input.length()>0)
{

ja.append(input);

}
}

} catch (Exception e) {
// TODO 自動生成 catch 塊

}
}

}
}

⑶ java Socket編程 為什麼起多個客戶端之後就會卡死在那(源碼如下)

伺服器端: package chat_01; import java.awt.BorderLayout; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JFrame; import javax.swing.JTextArea; public class ChatServer extends JFrame { private static final long serialVersionUID = 1L; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private JTextArea jta; private DataInputStream dis; private DataOutputStream dos; private ServerSocket serverSocket; private String dateString; public static void main(String[] args) { ChatServer server = new ChatServer(); server.showServer(); server.send(); } public void showServer() { jta = new JTextArea(); this.setLayout(new BorderLayout()); this.add(jta, BorderLayout.CENTER); this.setLocation(300, 100); this.setSize(500, 400); this.setTitle("伺服器端"); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void send() { try { serverSocket = new ServerSocket(8007); while (true) { Socket socket = serverSocket.accept(); System.out.println("一個用戶連接上了。。。"); dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); new Thread(new ClientThread()).start(); } } catch (IOException e) { e.printStackTrace(); } } private class ClientThread implements Runnable { public void run() { while (true) { try { Date currentTime = new Date(); dateString = format.format(currentTime); String str = dis.readUTF(); dos.writeUTF(str); jta.append(dateString + "\n" + str + "\n"); }catch (IOException e) { e.printStackTrace(); } } } } } 客戶端: package chat_01; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.Socket; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.*; public class ChatClient extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextArea jta; private JTextField jtf; private JButton jbt; DataOutputStream dos; DataInputStream dis; public static void main(String[] args) { ChatClient client = new ChatClient(); client.connected(); client.showClient(); } public void showClient() { jta = new JTextArea(); jta.setEditable(false); jtf = new JTextField(); jbt = new JButton("發送"); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(jtf, BorderLayout.CENTER); panel.add(jbt, BorderLayout.EAST); this.setLayout(new BorderLayout()); this.add(jta, BorderLayout.CENTER); this.add(panel, BorderLayout.SOUTH); jtf.addActionListener(this); jbt.addActionListener(this); this.setLocation(300, 100); this.setSize(500, 400); this.setTitle("客戶端"); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date currentTime = new Date(); String dateString = format.format(currentTime); String text = jtf.getText(); jta.append(dateString + "\n"); jta.append(text + "\n"); jtf.setText(""); jtf.grabFocus();// 文本框獲取游標(焦點) try { dos.writeUTF(text); dos.flush(); jta.append(dis.readUTF()); System.out.println(text + "client"); } catch (IOException e1) { e1.printStackTrace(); } } public void connected() { try { Socket socket = new Socket("127.0.0.1", 8007); dos = new DataOutputStream(socket.getOutputStream()); dis = new DataInputStream(socket.getInputStream()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

linux下socket 網路編程(客戶端向伺服器端發送文件) 求源代碼 大哥大姐幫幫忙 ,。。謝謝

簡單的:

//client
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

#define ERR() \
do { perror(""); printf("%d -- func: %s\n", __LINE__, __FUNCTION__); return -1; } while(0)

int main (int argc, char *argv[])
{
int sockfd, fd, nbytes;
struct sockaddr_in addr;
struct stat f_stat;

if (argc < 3) {
ERR();
}

fd = open (argv[2], O_RDONLY);

if (fd == -1) {
ERR();
}

sockfd = socket (AF_INET, SOCK_DGRAM, 0);

if (sockfd == -1) {
ERR();
}

addr.sin_family = AF_INET;
addr.sin_port = htons (5678);
inet_aton (argv[1], &addr.sin_addr);

if (-1 == lstat (argv[2], &f_stat) ) {
ERR();
}

char *buff = (char *) mmap (NULL, f_stat.st_size, PROT_READ, MAP_SHARED, fd, 0);
nbytes = sendto (sockfd, (void *) buff, f_stat.st_size, 0, (struct sockaddr *) &addr, (socklen_t) sizeof (addr) );

if (nbytes == -1) {
ERR();
}

munmap (buff, f_stat.st_size);
close (fd);
return 0;
}

===================================

//server
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

#define SIZE 512
#define ERR() \
do { perror(""); printf("%d -- func: %s\n", __LINE__, __FUNCTION__); return -1; } while(0)

int main (void)
{
int sockfd, fd, nbytes, ret;
socklen_t addr_len;
char buff[SIZE];
struct sockaddr_in addr;
sockfd = socket (AF_INET, SOCK_DGRAM, 0);

if (sockfd == -1) {
ERR();
}

memset ( (void *) &addr, 0, sizeof (addr) );
addr.sin_family = AF_INET;
addr.sin_port = htons (5678);
addr.sin_addr.s_addr = htonl (INADDR_ANY);
addr_len = sizeof (addr);
ret = bind (sockfd, (const struct sockaddr *) &addr, addr_len);

if (ret == -1) {
ERR();
}

printf ("#### Waiting For Data ... ####\n");
fd = creat ("recv", S_IWUSR | S_IRUSR);
nbytes = recvfrom (sockfd, (void *) buff, SIZE, 0, (struct sockaddr *) &addr, (socklen_t *) &addr_len);

if (nbytes == -1) {
ERR();
}

write (fd, (void *) buff, nbytes);
close (fd);
return 0;
}

⑸ linux socket網路編程學完看哪些源碼

1、仔細研究一下TCP/IP 2、看一下SOCKET模型結構 3、多研究一下UDP與TCP區別 4、更多交流參考我空間文章。

⑹ 使用c++6.0,基於Socket開發網路音頻點播程序。求源碼!

「對圖中的那些函數,我這里稍加解釋一下。」 int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); 功能是初始化Windows Socket Dll,在Windows下必須使用它。參數:「wVersionRequested」表示版本,可以是1.1、2.2等;「lpWSAData」指向WSADATA數據結構的指針。int socket(int family, int type, int protocol); 功能是建立Socket,返回以後會用到的Socket值。如果錯誤,返回-1。參數:「int family」參數指定所要使用的通信協議,取以下幾個值:AF_UNIX(Unix內部協議)、AF_INET(Internet協議)、AF_NS Xerox(NS協議)、AF_IMPLINK(IMP連接層),在Windows下只能把「AF」設為「AF_INET」;「int type」參數指定套接字的類型,取以下幾個值:SOCK_STREAM(流套接字)、SOCK_DGRAM (數據報套接字)、SOCK_RAW(未加工套接字)、SOCK_SEQPACKET(順序包套接字);「int protocol」參數通常設置為0。int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 功能是把套接字和機器上一定的埠關聯起來。參數:「sockfd」是調用socket()返回的套接字值;「my_addr」是指向數據結構struct sockaddr的指針,它保存你的地址,即埠和IP地址信息;「addrlen」設置為sizeof(struct sockaddr)。 int listen(int sockfd, int backlog); 功能是服務端監聽一個埠,直到accept()。在發生錯誤時返回-1。參數:「sockfd」是調用socket()返回的套接字值;「backlog」是允許的連接數目。大多數系統的允許數目是20,也可以設置為5到10。 int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 功能是客戶端連接服務端監聽的埠。參數:「sockfd」是調用socket()返回的套接字值;「serv_addr」保存著目的地埠和IP 地址的數據結構struct sockaddr;「addrlen」設置為sizeof(struct sockaddr)。 int accept(int sockfd, void *addr, int *addrlen); 功能是服務端接受客戶端的連接請求,並返回一個新的套接字,以後服務端的數據傳輸就使用這個新的套接字。如果有錯誤,返回-1。參數:「sockfd」是和listen()中一樣的套接字值;「addr」是個指向局部的數據結構sockaddr_in的指針;「addrlen」設置為sizeof(struct sockaddr_in)。int send(int sockfd, const void *msg, int len, int flags);int recv(int sockfd, void *buf, int len, unsigned int flags);功能是用於流式套接字或數據報套接字的通訊,我們數據的真正傳輸就由它們完成。參數:「sockfd」是發/收數據的套接字值;「msg」指向你想發送的數據的指針;「buf」是指向接收數據存放的地址;「len」是數據的長度;「flags」設置為 0。int sendto(int sockfd, const void *msg, int len, unsigned int flags,const struct sockaddr *to, int tolen);int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);功能和send、recv類似,不過是用於無連接數據報套接字的傳輸。 int closesocket(int sockfd) 功能是關閉套接字。參數「sockfd」為要關閉的套接字值。程序:「這里的目的是讓大家對Socket編程有個整體了解。不用怕,程序我會詳細解釋的,首先是服務端的程序。其流程是: socket()→bind()→listen→accept()→recv()/send()→closesocket() 具體代碼如下:」★#include #include #pragma comment(lib,"Ws2_32")#define MYPORT 830 /*定義用戶連接埠*/ #define BACKLOG 10 /*多少等待連接控制*/ int main() { int sockfd, new_fd; /*定義套接字*/ struct sockaddr_in my_addr; /*本地地址信息 */ struct sockaddr_in their_addr; /*連接者地址信息*/ int sin_size; WSADATA ws; WSAStartup(MAKEWORD(2,2),&ws); //初始化Windows Socket Dll //建立socket if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { //如果建立socket失敗,退出程序 printf("socket error\n"); exit(1); } //bind本機的MYPORT埠 my_addr.sin_family = AF_INET; /* 協議類型是INET */ my_addr.sin_port = htons(MYPORT); /* 綁定MYPORT埠*/ my_addr.sin_addr.s_addr = INADDR_ANY; /* 本機IP*/ if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) { //bind失敗,退出程序 printf("bind error\n"); closesocket(sockfd); exit(1); } //listen,監聽埠 if (listen(sockfd, BACKLOG) == -1) { //listen失敗,退出程序 printf("listen error\n"); closesocket(sockfd); exit(1); } printf("listen"); //等待客戶端連接 sin_size = sizeof(struct sockaddr_in); if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) { printf("accept error\n"); closesocket(sockfd); exit(1); } printf("\naccept!\n"); //有連接,發送ww0830字元串過去 if (send(new_fd, "ww0830\n", 14, 0) == -1) { printf("send error"); closesocket(sockfd); closesocket(new_fd); exit(1); } printf("send ok!\n"); //成功,關閉套接字 closesocket(sockfd); closesocket(new_fd); return 0;}對服務端程序的流程概括:先是初始化Windows Socket Dll: WSAStartup(MAKEWORD(2,2),&ws); 然後建立Socket: sockfd = socket(AF_INET, SOCK_STREAM, 0) 再bind本機的MYPORT埠:my_addr.sin_family = AF_INET; /* 協議類型是INET */ my_addr.sin_port = htons(MYPORT); /* 綁定MYPORT埠 */ my_addr.sin_addr.s_addr = INADDR_ANY; /* 本機IP */ bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) 接下來監聽埠: listen(sockfd, BACKLOG) 如果有客戶端的連接請求,接收它: new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size) 最後發送ww0830字元串過去: send(new_fd, "ww0830\n", 14, 0) 收尾工作,關閉socket: closesocket(sockfd); closesocket(new_fd); 」編譯、執行,就會一直監聽830埠客戶端程序了。其流程是: socket()→connect()→send()/recv()→closesocket() 比服務端更簡單吧!其實現代碼如下:」★#include #include #include #pragma comment(lib,"Ws2_32") #define PORT 830 /* 客戶機連接遠程主機的埠 */ #define MAXDATASIZE 100 /* 每次可以接收的最大位元組 */ int main(int argc, char *argv[]) { int sockfd, numbytes; char buf[MAXDATASIZE]; struct sockaddr_in their_addr; /* 對方的地址埠信息 */ if (argc != 2) { //需要有服務端ip參數 fprintf(stderr,"usage: client hostname\n"); exit(1); } WSADATA ws;WSAStartup(MAKEWORD(2,2),&ws); //初始化Windows Socket Dll if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ //如果建立socket失敗,退出程序 printf("socket error\n"); exit(1); } //連接對方their_addr.sin_family = AF_INET; /* 協議類型是INET */ their_addr.sin_port = htons(PORT); /* 連接對方PORT埠 */ their_addr.sin_addr.s_addr = inet_addr(argv[1]); /* 連接對方的IP */ if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1){ //如果連接失敗,退出程序 printf("connet error\n"); closesocket(sockfd); exit(1); } //接收數據,並列印出來if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) { //接收數據失敗,退出程序 printf("recv error\n"); closesocket(sockfd); exit(1); } buf[numbytes] = '\0'; printf("Received: %s",buf); closesocket(sockfd); return 0; } 對客戶端程序的流程概括:首先是初始化Windows Socket Dll: WSAStartup(MAKEWORD(2,2),&ws); 然後建立Socket: sockfd = socket(AF_INET, SOCK_STREAM, 0) 接著連接伺服器方:their_addr.sin_family = AF_INET; /* 協議類型是INET */ their_addr.sin_port = htons(PORT); /* 連接對方PORT埠 */ their_addr.sin_addr.s_addr = inet_addr(argv[1]); /* 連接對方的IP */ connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) 連接成功就接收數據: recv(sockfd, buf, MAXDATASIZE, 0) 最後把收到的數據列印出來並關閉套接字: printf("Received: %s",buf); closesocket(sockfd); 編譯結束後,運行服務端,然後。客戶端 服務端IP 回車你會看到服務端發來得數據。那麼基本的點對點通信就沒問題了。只要兩台機器同時包含服務端和客戶端,就可以互相通信了。當然,你也可以將服務端和客戶端分開做,專門一個伺服器負責用戶登錄和轉發消息。流程如下:A客戶端發登錄消息-----》伺服器伺服器驗證發送用戶消息----》客戶端A客戶端想發消息給B客戶端----》先發給服務端伺服器得到消息查詢B客戶端IP並轉發消息。(或者B客戶端循環發消息詢問伺服器有無消息)通信結束。

⑺ C# socket 聊天的 C/s程序 源碼

//"開始"按鈕事件
privatevoidbutton1_Click(objectsender,System.EventArgse){
//取得預保存的文件名
stringfileName=textBox3.Text.Trim();
//遠程主機
stringhostName=textBox1.Text.Trim();
//埠
intport=Int32.Parse(textBox2.Text.Trim());
//得到主機信息
IPHostEntryipInfo=Dns.GetHostByName(hostName);
//取得IPAddress[]
IPAddress[]ipAddr=ipInfo.AddressList;
//得到ip
IPAddressip=ipAddr[0];
//組合出遠程終結點
IPEndPointhostEP=newIPEndPoint(ip,port);
//創建Socket實例
Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//嘗試連接
socket.Connect(hostEP);
}
catch(Exceptionse)
{
MessageBox.Show("連接錯誤"+se.Message,"提示信息
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//發送給遠程主機的請求內容串
stringsendStr="GET/HTTP/1.1 Host:"+hostName+
" Connection:Close ";
//創建bytes位元組數組以轉換發送串
byte[]bytesSendStr=newbyte[1024];
//將發送內容字元串轉換成位元組byte數組
bytesSendStr=Encoding.ASCII.GetBytes(sendStr);
try
{
//向主機發送請求
socket.Send(bytesSendStr,bytesSendStr.Length,0);
}
catch(Exceptionce)
{
MessageBox.Show("發送錯誤:"+ce.Message,"提示信息
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//聲明接收返回內容的字元串
stringrecvStr="";
//聲明位元組數組,一次接收數據的長度為1024位元組
byte[]recvBytes=newbyte[1024];
//返回實際接收內容的位元組數
intbytes=0;
//循環讀取,直到接收完所有數據
while(true)
{
bytes=socket.Receive(recvBytes,recvBytes.Length,0);
//讀取完成後退出循環
if(bytes〈=0)
break;
//將讀取的位元組數轉換為字元串
recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes);
}
//將所讀取的字元串轉換為位元組數組
byte[]content=Encoding.ASCII.GetBytes(recvStr);
try
{
//創建文件流對象實例
FileStreamfs=newFileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
//寫入文件
fs.Write(content,0,content.Length);
}
catch(Exceptionfe)
{
MessageBox.Show("文件創建/寫入錯誤:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//禁用Socket
socket.Shutdown(SocketShutdown.Both);
//關閉Socket
socket.Close();
}
}



⑻ linux下socket 網路編程(客戶端向伺服器端發送文件) 求源代碼 大哥大姐幫幫忙 。。謝謝

server:

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <syslog.h>
#include <sys/time.h>
#include <string.h>
#include <fcntl.h>
#include <sys/wait.h>

#define MAXDATASIZE 1024
#define SERVPORT 19999
#define BACKLOG 10

int SendFileToServ(const char *path, const char *FileName, const char *ip)
{
#define PORT 20002
int sockfd;
int recvbytes;
char buf[MAXDATASIZE];
char send_str[MAXDATASIZE];
char filepath[128] = {0};
struct sockaddr_in serv_addr;
FILE *fp;
sprintf(filepath, "%s%s", path, FileName);

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
return 1;
}
bzero(&serv_addr,sizeof(struct sockaddr_in));
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(PORT);
inet_aton(ip, &serv_addr.sin_addr);
int IErrCount = 0;
again:
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
{
if (5 == IErrCount)
return 1;
IErrCount++;
perror("connect");
sleep(2);
goto again;
}
//if ((fp = fopen(FileName, "rb")) == NULL)
if ((fp = fopen(filepath, "rb")) == NULL)
{
perror("fopen ");
return 1;
}
recvbytes = write(sockfd, FileName, strlen(FileName));
recvbytes = read(sockfd, buf, MAXDATASIZE);
if (!memcmp(buf, "sendmsg", 7))
{
while(fgets(send_str, MAXDATASIZE, fp))
{
recvbytes = write(sockfd, send_str, strlen(send_str));
recvbytes = read(sockfd, buf, MAXDATASIZE);
if (recvbytes <= 0)
{
fclose(fp);
close(sockfd);
return 1;
}
if (memcmp(buf, "goon", 4))
{
fclose(fp);
close(sockfd);
return 1;
}
}
recvbytes = write(sockfd, "end", 3);
}
else
{
fclose(fp);
close(sockfd);
return 1;
}
memset(buf, 0, MAXDATASIZE);
if (read(sockfd, buf, MAXDATASIZE) <= 0)
{
close(sockfd);
return 2;
}
char *Eptr = "nginx reload error";
//printf("bf[%s]\n", buf);
int ret;
ret = strncmp(buf, Eptr, strlen(Eptr));
//printf("%d\n", ret);
if (!ret)
{
close(sockfd);
return 2;
}

close(sockfd);
return 0;
}

int mysyslog(const char * msg)
{
FILE *fp;
if ((fp = fopen("/tmp/tmp.log", "a+")) == NULL)
{
return 0;
}
fprintf(fp, "[%s]\n", msg);
fclose(fp);
return 0;
}
static void quit_handler(int signal)
{
kill(0, SIGUSR2);
syslog( LOG_NOTICE, "apuserv quit...");
// do something exit thing ,such as close socket ,close mysql,free list
// .....
//i end
exit(0);
}
static int re_conf = 0;
static void reconf_handler(int signal)
{
re_conf=1;
syslog(LOG_NOTICE,"apuserv reload configure file .");
// 請在循環體中判斷,如果re_conf == 1,請再次載入配置文件。
}
static int isrunning(void)
{
int fd;
int ret;
struct flock lock;
lock.l_type = F_WRLCK;
lock.l_whence = 0;
lock.l_start = 0;
lock.l_len = 0;
const char *lckfile = "/tmp/apuserv.lock";
fd = open(lckfile,O_WRONLY|O_CREAT);
if (fd < 0) {
syslog(LOG_ERR,"can not create lock file: %s\n",lckfile);
return 1;
}
if ((ret = fcntl(fd,F_SETLK,&lock)) < 0) {
ret = fcntl(fd,F_GETLK,&lock);
if (lock.l_type != F_UNLCK) {
close(fd);
return lock.l_pid;
}
else {
fcntl(fd,F_SETLK,&lock);
}
}
return 0;
}

int MyHandleBuff(const char *buf, char *str, char *FileName, char *pth)
{
sscanf(buf, "%s %s %s", pth, FileName, str);
printf("path=%s\nfilename=%s\nip=%s\n", pth, FileName, str);
return 0;
}

int main(int argc, char **argv)
{
int sockfd,client_fd;
socklen_t sin_size;
struct sockaddr_in my_addr,remote_addr;
char buff[MAXDATASIZE];
int recvbytes;
#if 1
int pid ;
char ch ;
int ret;
int debug = 0;
signal(SIGUSR1, SIG_IGN);
signal(SIGUSR2, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGTERM, quit_handler);
syslog(LOG_NOTICE,"apuserver start....");
while ((ch = getopt(argc, argv, "dhV")) != -1) {
switch (ch) {
case 'd':
debug = 1;
break;
case 'V':
printf("Version:%s\n","1.0.0");
return 0;
case 'h':
printf(" -d use daemon mode\n");
printf(" -V show version\n");
return 0;
default:
printf(" -d use daemon mode\n");
printf(" -V show version\n");
}
}
if (debug && daemon(0,0 ) ) {
return -1;
}
if (isrunning()) {
fprintf(stderr, "apuserv is already running\n");
syslog(LOG_INFO,"apuserv is already running\n");
exit(0);
}
while (1) {
pid = fork();
if (pid < 0)
return -1;
if (pid == 0)
break;
while ((ret = waitpid(pid, NULL, 0)) != pid) {
syslog(LOG_NOTICE, "waitpid want %d, but got %d", pid, ret);
if (ret < 0)
syslog(LOG_NOTICE, "waitpid errno:%d", errno);
}
kill(0, SIGUSR2);
sleep(1);
syslog(LOG_NOTICE,"restart apuserver");
}
signal(SIGHUP, reconf_handler);
signal(SIGPIPE, SIG_IGN);
signal(SIGUSR1,SIG_IGN);
signal(SIGUSR2, SIG_DFL);
signal(SIGTERM, SIG_DFL);
#endif
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}

bzero(&my_addr,sizeof(struct sockaddr_in));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen");
exit(1);
}
int nret;
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size))==-1)
{
perror("falied accept");
continue;
}
memset(buff, 0, MAXDATASIZE);
recvbytes = read(client_fd, buff, MAXDATASIZE);
char str[16] = {0};
char FileName[128] = {0};
char path[128] = {0};
MyHandleBuff(buff, str, FileName, path);
if (recvbytes > 0)
{
nret = SendFileToServ(path, FileName, str);
printf("nret[%d]\n", nret);
if (1 == nret)
write(client_fd, "send file error", 15);
else if(2 == nret)
write(client_fd, "reload nginx error", 18);
else
write(client_fd, "succ", 4);
}
close(client_fd);
}
}
_________________________________________________
client:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <syslog.h>
#include <sys/time.h>
#include <string.h>
#include <fcntl.h>
#include <sys/wait.h>

#define MAXDATASIZE 1024
#define SERVPORT 20002
#define BACKLOG 10

int mysyslog(const char * msg)
{
FILE *fp;
if ((fp = fopen("/tmp/tmp.log", "a+")) == NULL)
{
return 0;
}
fprintf(fp, "[%s]\n", msg);
fclose(fp);
return 0;
}
static void quit_handler(int signal)
{
kill(0, SIGUSR2);
syslog( LOG_NOTICE, "apuserv quit...");
// do something exit thing ,such as close socket ,close mysql,free list
// .....
//i end
exit(0);
}
static int re_conf = 0;
static void reconf_handler(int signal)
{
re_conf=1;
syslog(LOG_NOTICE,"apuserv reload configure file .");
// ????·???????1nf == 1£???′μ?????

static int isrunning(void)
{
int fd;
int ret;
struct flock lock;
lock.l_type = F_WRLCK;
lock.l_whence = 0;
lock.l_start = 0;
lock.l_len = 0;
const char *lckfile = "/tmp/dstserver.lock";
fd = open(lckfile,O_WRONLY|O_CREAT);
if (fd < 0) {
syslog(LOG_ERR,"can not create lock file: %s\n",lckfile);
return 1;
}
if ((ret = fcntl(fd,F_SETLK,&lock)) < 0) {
ret = fcntl(fd,F_GETLK,&lock);
if (lock.l_type != F_UNLCK) {
close(fd);
return lock.l_pid;
}
else {
fcntl(fd,F_SETLK,&lock);
}
}
return 0;
}

int main(int argc, char **argv)
{
int sockfd,client_fd;
socklen_t sin_size;
struct sockaddr_in my_addr,remote_addr;
char buff[MAXDATASIZE];
int recvbytes;
#if 1
int pid ;
char ch ;
int ret;
int debug = 0;
signal(SIGUSR1, SIG_IGN);
signal(SIGUSR2, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGTERM, quit_handler);
syslog(LOG_NOTICE,"dstserver start....");

while ((ch = getopt(argc, argv, "dhV")) != -1) {
switch (ch) {
case 'd':
debug = 1;
break;
case 'V':
printf("Version:%s\n","1.0.0");
return 0;
case 'h':
printf(" -d use daemon mode\n");
printf(" -V show version\n");
return 0;
default:
printf(" -d use daemon mode\n");
printf(" -V show version\n");
}
}
if (debug && daemon(0,0 ) ) {
return -1;
}
if (isrunning()) {
fprintf(stderr, "dstserver is already running\n");
syslog(LOG_INFO,"dstserver is already running\n");
exit(0);
}
while (1) {
pid = fork();
if (pid < 0)
return -1;
if (pid == 0)
break;
while ((ret = waitpid(pid, NULL, 0)) != pid) {
syslog(LOG_NOTICE, "waitpid want %d, but got %d", pid, ret);
if (ret < 0)
syslog(LOG_NOTICE, "waitpid errno:%d", errno);
}
kill(0, SIGUSR2);
sleep(1);
syslog(LOG_NOTICE,"restart apuserver");
}
signal(SIGHUP, reconf_handler);
signal(SIGPIPE, SIG_IGN);
signal(SIGUSR1,SIG_IGN);
signal(SIGUSR2, SIG_DFL);
signal(SIGTERM, SIG_DFL);
#endif
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}

bzero(&my_addr,sizeof(struct sockaddr_in));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen");
exit(1);
}

char filepath[MAXDATASIZE]= {0};
FILE *fp;
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size))==-1)
{
perror("falied accept");
continue;
}
memset(buff, 0, MAXDATASIZE);
recvbytes = read(client_fd, buff, MAXDATASIZE);
sprintf(filepath, "/etc/nginx/url_rule/%s", buff);
if ((fp = fopen(filepath, "wb")) == NULL)
{
perror("fopen");
close(client_fd);
continue;
}
write(client_fd, "sendmsg", 7);
while(read(client_fd, buff, MAXDATASIZE))
{
if (!memcmp(buff, "end", 3))
{
fclose(fp);
break;
}
else
{
fprintf(fp, "%s", buff);
write(client_fd, "goon", 4);
}
}
//system("nginx -s reload");
char *Sptr = "nginx reload succ";
char *Eptr = "nginx reload error";
int ret;
ret = system("nginx -s reload");
printf("ret[%d]\n", ret);
if (ret != 0)
{
write(client_fd, Eptr, strlen(Eptr));
}
else
{
write(client_fd, Sptr, strlen(Sptr));
}
close(client_fd);
}
}

以前寫的:內容忘記了。不是很復雜你可以自己看!

⑼ Linux中C語言的一個函數的源代碼:socket 編程中的 recv() 函數。

在內核中它是sys_recv()

⑽ 求一個socket聊天程序源碼 C語言的

通過socket編程自己寫一個唄,可以學習一下socket編程方面的知識

閱讀全文

與socket編程源碼相關的資料

熱點內容
小愛同學app里怎麼設置鬧鍾 瀏覽:626
微信小程序題庫源碼 瀏覽:734
國內程序員女高管 瀏覽:881
程序員會壓抑 瀏覽:682
物探編程 瀏覽:302
vuepdf預覽 瀏覽:327
迷你世界出編程軟體了 瀏覽:673
res文件夾有哪些 瀏覽:142
交通信號燈單片機課程設計 瀏覽:826
如何測試流媒體伺服器的並發能力 瀏覽:161
溯源碼有分國家認證的嗎 瀏覽:218
如何通過app查詢產檢報告 瀏覽:944
拉結爾安卓手機怎麼用 瀏覽:695
驅動級進程代理源碼 瀏覽:782
androidshape畫線 瀏覽:511
程序員想辭職被拒絕 瀏覽:101
java面試邏輯 瀏覽:749
如何下載全英文app 瀏覽:724
js函數式編程指南 瀏覽:380
為什麼安卓手機相機啟動會卡 瀏覽:341