카카오톡 메세지 자동전송 프로그램
카카오톡 전송을 이용하여 메세지 전송을
자동으로 해주는 자동메세지 전송 프로그램입니다.
카카오톡에서 작성한 내용뿐만아니라 이미지도
자동으로 전송할수 있는 자동전송 프로그램입니다.
using System.Reflection;
using System.Runtime.CompilerServices;
//
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 제어됩니다.
// 어셈블리와 관련된 정보를 수정하려면
// 이 특성 값을 변경하십시오.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 번호
//
// 모든 값을 지정하거나
// 아래와 같이 '*'를 사용하여 수정 번호 및 빌드 번호가 자동으로 지정되도록 할 수 있습니다.
[assembly: AssemblyVersion("1.0.*")]
//
// 어셈블리에 서명하려면 사용할 키를 지정해야 합니다. 어셈블리 서명에 대한 자세한 내용은
// Microsoft .NET Framework 설명서를 참조하십시오.
//
// 서명하는 데 사용할 키를 제어하려면 아래 특성을 사용합니다.
//
// 참고:
// (*) 키를 지정하지 않으면 어셈블리에 서명할 수 없습니다.
// (*) KeyName은
// 사용자 컴퓨터의 CSP(암호화 서비스 공급자)에
// 설치되어 있는 키를 참조하고 KeyFile은 키가 포함된 파일을
// 참조합니다.
// (*) KeyFile과 KeyName 값을 모두 지정하면
// 다음과 같은 프로세스가 발생합니다.
// (1) CSP에 KeyName이 있으면 해당 키가 사용됩니다.
// (2) KeyName은 없고, KeyFile이 있으면
// KeyFile의 키가 CSP에 설치되어 사용됩니다.
// (*) sn.exe(강력한 이름 유틸리티)를 사용하면 KeyFile을 만들 수 있습니다.
// KeyFile을 지정하는 경우
// KeyFile의 위치는 %Project Directory%\obj\<configuration>의 프로젝트 출력 디렉터리 위치를 기준으로 하는 상대 위치이어야 합니다.
// 예를 들어, KeyFile이 프로젝트 디렉터리에 있는 경우
// AssemblyKeyFile 특성을
// [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]로 지정합니다.
// (*) 서명 연기는 고급 옵션입니다.
// 이 옵션에 대한 자세한 내용은 Microsoft .NET Framework 설명서를 참조하십시오.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
========================================================================
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Text;
namespace Chapter13_2
{
/// <summary>
/// Form1에 대한 요약 설명입니다.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.Container components = null;
private const int port=4567;
private Socket listenSocket;
private Socket clientSocket;
private Socket remoteSocket;
private IPEndPoint listenEP;
private IPEndPoint remoteEP;
private Thread listenThread;
private System.Windows.Forms.ListBox listBox1;
private Thread streamThread;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button button4;
private Thread clientThread;
private bool isServer=true;
public Form1()
{
//
// Windows Form 디자이너 지원에 필요합니다.
//
InitializeComponent();
//
// TODO: InitializeComponent를 호출한 다음 생성자 코드를 추가합니다.
//
}
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form 디자이너에서 생성한 코드
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.button3 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.listBox1 = new System.Windows.Forms.ListBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.button4 = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.button3);
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Controls.Add(this.button1);
this.groupBox1.Controls.Add(this.textBox1);
this.groupBox1.Location = new System.Drawing.Point(0, 8);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(288, 88);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "접속";
//
// button3
//
this.button3.Location = new System.Drawing.Point(152, 24);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(128, 24);
this.button3.TabIndex = 3;
this.button3.Text = "클라이언트";
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(8, 24);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(128, 24);
this.button2.TabIndex = 2;
this.button2.Text = "서버";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button1
//
this.button1.Location = new System.Drawing.Point(152, 56);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(128, 24);
this.button1.TabIndex = 1;
this.button1.Text = "접속";
this.button1.Visible = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Enabled = false;
this.textBox1.Location = new System.Drawing.Point(8, 56);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(128, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "127.0.0.1";
this.textBox1.Visible = false;
//
// listBox1
//
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(0, 104);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(288, 136);
this.listBox1.TabIndex = 1;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(0, 248);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(200, 21);
this.textBox2.TabIndex = 2;
this.textBox2.Text = "";
//
// button4
//
this.button4.Location = new System.Drawing.Point(208, 248);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(80, 24);
this.button4.TabIndex = 3;
this.button4.Text = "보내기";
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button4);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.groupBox1);
this.Name = "Form1";
this.Text = "Form1";
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button3_Click(object sender, System.EventArgs e)
{
//클라이언트로 실행했을때
//소켓을 생성하고
//데이터를 받는 스레드를 생성한다.
this.textBox1.Visible=true;
this.button1.Visible=true;
try
{
remoteSocket=new Socket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.Tcp);
remoteEP=new IPEndPoint(IPAddress.Loopback,port);
clientThread=new Thread(new ThreadStart(client));
}
catch(System.Net.Sockets.SocketException se)
{
Console.WriteLine(se.ToString());
}
}
private void button2_Click(object sender, System.EventArgs e)
{
//서버로 실행했을때
//소켓을 생성하고
//데이타를 받는 스레드를 생성,시작한다.
//클라이언트가 접속하기를 기다리는
//스레드도 생성,시작한다.
try
{
listenSocket=new Socket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.Tcp);
listenEP=new IPEndPoint(IPAddress.Any,port);
listenSocket.Bind(listenEP);
listenSocket.Listen(5);
listenThread=new Thread(new ThreadStart(listen));
listenThread.Start();
streamThread=new Thread(new ThreadStart(Stream));
streamThread.Start();
this.listBox1.Items.Add("Server Start");
}
catch(System.Net.Sockets.SocketException se)
{
Console.WriteLine(se.ToString());
}
}
private void listen()
{
//클라이언트를 기다린다.
while(true)
{
Thread.Sleep(100);
clientSocket=listenSocket.Accept();
this.listBox1.Items.Add("클라이언트 접속");
}
}
private void Stream()
{
//서버편 데이타를 받는 스레드 함수
//
byte[] buffer=new byte[512];
string temp=null;
while(true)
{
Thread.Sleep(100);
if(clientSocket !=null)
{
int rec=clientSocket.Receive(buffer);
temp=Encoding.Unicode.GetString(buffer,0,rec);
this.listBox1.Items.Add(temp);
}
}
}
private void button4_Click(object sender, System.EventArgs e)
{
//서버와 클라이언트 모두
//데이타를 보내는 함수로
//서버일때와 클라이언트일때 보내는 소켓이 다르다.
byte[] send=new byte[512];
if(isServer)
{
Encoding.Unicode.GetBytes(this.textBox2.Text,
0,this.textBox2.Text.Length,send,0);
clientSocket.Send(send);
}
else
{
Encoding.Unicode.GetBytes(this.textBox2.Text,
0,this.textBox2.Text.Length,send,0);
remoteSocket.Send(send);
}
this.textBox2.Text="";
}
protected override void OnClosing(CancelEventArgs e)
{
if(listenThread != null)
listenThread.Abort();
if(streamThread != null)
streamThread.Abort();
base.OnClosing (e);
}
private void button1_Click(object sender, System.EventArgs e)
{
//클라이언트로 접속 버튼을 누르면
//서버에 접속을하고
//데이타를 기다리는 스레드를 시작한다.
try
{
remoteSocket.Connect(remoteEP);
isServer=false;
clientThread.Start();
}
catch(System.Net.Sockets.SocketException se)
{
Console.WriteLine(se.ToString());
}
}
private void client()
{
//클라이언트가 서버로부터 데이타를
//수신대기하는 함수이다.
byte[] buffer=new byte[512];
string temp=null;
while(true)
{
Thread.Sleep(100);
if(remoteSocket !=null)
{
int rec=remoteSocket.Receive(buffer);
temp=Encoding.Unicode.GetString(buffer,0,rec);
this.listBox1.Items.Add(temp);
}
}
}
}
}
========================================================================
using System.Reflection;
using System.Runtime.CompilerServices;
//
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 제어됩니다.
// 어셈블리와 관련된 정보를 수정하려면
// 이 특성 값을 변경하십시오.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 번호
//
// 모든 값을 지정하거나
// 아래와 같이 '*'를 사용하여 수정 번호 및 빌드 번호가 자동으로 지정되도록 할 수 있습니다.
[assembly: AssemblyVersion("1.0.*")]
//
// 어셈블리에 서명하려면 사용할 키를 지정해야 합니다. 어셈블리 서명에 대한 자세한 내용은
// Microsoft .NET Framework 설명서를 참조하십시오.
//
// 서명하는 데 사용할 키를 제어하려면 아래 특성을 사용합니다.
//
// 참고:
// (*) 키를 지정하지 않으면 어셈블리에 서명할 수 없습니다.
// (*) KeyName은
// 사용자 컴퓨터의 CSP(암호화 서비스 공급자)에
// 설치되어 있는 키를 참조하고 KeyFile은 키가 포함된 파일을
// 참조합니다.
// (*) KeyFile과 KeyName 값을 모두 지정하면
// 다음과 같은 프로세스가 발생합니다.
// (1) CSP에 KeyName이 있으면 해당 키가 사용됩니다.
// (2) KeyName은 없고, KeyFile이 있으면
// KeyFile의 키가 CSP에 설치되어 사용됩니다.
// (*) sn.exe(강력한 이름 유틸리티)를 사용하면 KeyFile을 만들 수 있습니다.
// KeyFile을 지정하는 경우
// KeyFile의 위치는 %Project Directory%\obj\<configuration>의 프로젝트 출력 디렉터리 위치를 기준으로 하는 상대 위치이어야 합니다.
// 예를 들어, KeyFile이 프로젝트 디렉터리에 있는 경우
// AssemblyKeyFile 특성을
// [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]로 지정합니다.
// (*) 서명 연기는 고급 옵션입니다.
// 이 옵션에 대한 자세한 내용은 Microsoft .NET Framework 설명서를 참조하십시오.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
========================================================================
using System;
using System.Threading;
class SimpleThread
{
public void SimpleMethod()
{
Random RandomNumber = new Random();
for (int i=0;i<3;i++)
{
Console.WriteLine(i+" "+Thread.CurrentThread.Name);
Thread.Sleep(RandomNumber.Next(1,5)*1000);
}
Console.WriteLine("DONE! "+Thread.CurrentThread.Name);
}
}
class Exercise
{
public static void Main()
{
SimpleThread obj = new SimpleThread();
ThreadStart ts = new ThreadStart(obj.SimpleMethod);
Thread worker1 = new Thread(ts);
Thread worker2 = new Thread(ts);
worker1.Name = "Apple";
worker2.Name = "Orange";
worker1.Start();
worker2.Start();
}
}
========================================================================
using System.Reflection;
using System.Runtime.CompilerServices;
//
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 제어됩니다.
// 어셈블리와 관련된 정보를 수정하려면
// 이 특성 값을 변경하십시오.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 번호
//
// 모든 값을 지정하거나
// 아래와 같이 '*'를 사용하여 수정 번호 및 빌드 번호가 자동으로 지정되도록 할 수 있습니다.
[assembly: AssemblyVersion("1.0.*")]
//
// 어셈블리에 서명하려면 사용할 키를 지정해야 합니다. 어셈블리 서명에 대한 자세한 내용은
// Microsoft .NET Framework 설명서를 참조하십시오.
//
// 서명하는 데 사용할 키를 제어하려면 아래 특성을 사용합니다.
//
// 참고:
// (*) 키를 지정하지 않으면 어셈블리에 서명할 수 없습니다.
// (*) KeyName은
// 사용자 컴퓨터의 CSP(암호화 서비스 공급자)에
// 설치되어 있는 키를 참조하고 KeyFile은 키가 포함된 파일을
// 참조합니다.
// (*) KeyFile과 KeyName 값을 모두 지정하면
// 다음과 같은 프로세스가 발생합니다.
// (1) CSP에 KeyName이 있으면 해당 키가 사용됩니다.
// (2) KeyName은 없고, KeyFile이 있으면
// KeyFile의 키가 CSP에 설치되어 사용됩니다.
// (*) sn.exe(강력한 이름 유틸리티)를 사용하면 KeyFile을 만들 수 있습니다.
// KeyFile을 지정하는 경우
// KeyFile의 위치는 %Project Directory%\obj\<configuration>의 프로젝트 출력 디렉터리 위치를 기준으로 하는 상대 위치이어야 합니다.
// 예를 들어, KeyFile이 프로젝트 디렉터리에 있는 경우
// AssemblyKeyFile 특성을
// [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]로 지정합니다.
// (*) 서명 연기는 고급 옵션입니다.
// 이 옵션에 대한 자세한 내용은 Microsoft .NET Framework 설명서를 참조하십시오.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
========================================================================
using System;
using System.Threading;
public class MainThreadTest
{
public static void Main ()
{
Thread th = Thread.CurrentThread;
Console.WriteLine("1. 현재 Thread HashCode:", th.GetHashCode());
Console.WriteLine("2. 스레드의 이름:"+ th.Name);
Console.WriteLine("3. 스레드의 CurrentCulture:"+ th.CurrentCulture);
Console.WriteLine("4. 스레드의 우선순위:"+ th.Priority);
Console.WriteLine("5. 스레드의 상태:"+ th.ThreadState);
Console.WriteLine("6. 스레드의 IsBackground:"+ th.IsBackground);
}
}
========================================================================
using System.Reflection;
using System.Runtime.CompilerServices;
//
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 제어됩니다.
// 어셈블리와 관련된 정보를 수정하려면
// 이 특성 값을 변경하십시오.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 번호
//
// 모든 값을 지정하거나
// 아래와 같이 '*'를 사용하여 수정 번호 및 빌드 번호가 자동으로 지정되도록 할 수 있습니다.
[assembly: AssemblyVersion("1.0.*")]
//
// 어셈블리에 서명하려면 사용할 키를 지정해야 합니다. 어셈블리 서명에 대한 자세한 내용은
// Microsoft .NET Framework 설명서를 참조하십시오.
//
// 서명하는 데 사용할 키를 제어하려면 아래 특성을 사용합니다.
//
// 참고:
// (*) 키를 지정하지 않으면 어셈블리에 서명할 수 없습니다.
// (*) KeyName은
// 사용자 컴퓨터의 CSP(암호화 서비스 공급자)에
// 설치되어 있는 키를 참조하고 KeyFile은 키가 포함된 파일을
// 참조합니다.
// (*) KeyFile과 KeyName 값을 모두 지정하면
// 다음과 같은 프로세스가 발생합니다.
// (1) CSP에 KeyName이 있으면 해당 키가 사용됩니다.
// (2) KeyName은 없고, KeyFile이 있으면
// KeyFile의 키가 CSP에 설치되어 사용됩니다.
// (*) sn.exe(강력한 이름 유틸리티)를 사용하면 KeyFile을 만들 수 있습니다.
// KeyFile을 지정하는 경우
// KeyFile의 위치는 %Project Directory%\obj\<configuration>의 프로젝트 출력 디렉터리 위치를 기준으로 하는 상대 위치이어야 합니다.
// 예를 들어, KeyFile이 프로젝트 디렉터리에 있는 경우
// AssemblyKeyFile 특성을
// [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]로 지정합니다.
// (*) 서명 연기는 고급 옵션입니다.
// 이 옵션에 대한 자세한 내용은 Microsoft .NET Framework 설명서를 참조하십시오.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]